OpenCV 学习3 - 裁剪图像

裁剪是为了从图像中删除不需要的对象或区域,或为了突出图像的特定特征。

1、数组切片

图像本质是多维数组(NumPy数组),OpenCV图像裁剪的原理是基于数组切片操作。

  • 裁剪坐标说明

(0,0) ──────────→ x (width)

│ (x1,y1)──────┐

│ │ │

│ └─────────(x2,y2)

y (height)

python 复制代码
cropped_img = image[y_start:y_end, x_start:x_end]

2、代码示例:显示和保存裁剪区域的图像

python 复制代码
import cv2
import numpy as np
import os


img_path = "img/dog.jpg"
if not os.path.exists(img_path):
    raise FileNotFoundError(f"未找到图像文件{img_path}")

img = cv2.imread(img_path, cv2.IMREAD_COLOR)

# 显示裁剪的图像
cropped_image = img[100:500, 50:450]
cv2.imshow("cropped_image", cropped_image)

# 保存裁剪后的图像
cv2.imwrite("img/cropped_dog.jpg", cropped_image)

cv2.waitKey(0)
cv2.destroyAllWindows()

3、代码示例:给图像画九宫格

python 复制代码
import cv2
import numpy as np
import os

img_path = "img/dog.jpg"
if not os.path.exists(img_path):
    raise FileNotFoundError(f"未找到图像文件{img_path}")

img = cv2.imread(img_path, cv2.IMREAD_COLOR)

img_height = img.shape[0]
img_width = img.shape[1]

w_sum = 0
h_sum = 0

patche_w = 230
patche_h = 306

for h in range(0, img_height, patche_h):
    for w in range(0, img_width, patche_w):
        
        if (img_height - h) < patche_h or (img_width - w) < patche_w:
            break
        
        h_sum = h + patche_h
        w_sum = w + patche_w

        if w_sum >= img_width and h_sum >= img_height: # 超过图像宽度和高度
            w_sum = img_width - 1
            h_sum = img_height - 1
            cv2.rectangle(img, (w, h), (w_sum, h_sum), (255, 255, 255), 2)
        elif h_sum >= img_height: # 超过图像高度
            h_sum = img_height - 1
            cv2.rectangle(img, (w, h), (w_sum, h_sum), (255, 255, 255), 2)
        elif w_sum >= img_width: # 超过图像宽度
            w_sum = img_width - 1
            cv2.rectangle(img, (w, h), (w_sum, h_sum), (255, 255, 255), 2)
        else:
            cv2.rectangle(img, (w, h), (w_sum, h_sum), (255, 255, 255), 2)

cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
格林威18 小时前
Baumer相机轴承滚珠缺失检测:用于精密装配验证的 6 个核心算法,附 OpenCV+Halcon 实战代码!
人工智能·opencv·算法·计算机视觉·视觉检测·工业相机·堡盟相机
格林威18 小时前
相机的“对焦”和“变焦”,这二者有什么区别?
开发语言·人工智能·数码相机·opencv·算法·计算机视觉·视觉检测
智驱力人工智能2 天前
货车违规变道检测 高速公路安全治理的工程实践 货车变道检测 高速公路货车违规变道抓拍系统 城市快速路货车压实线识别方案
人工智能·opencv·算法·安全·yolo·目标检测·边缘计算
qwy7152292581632 天前
11-图像的缩放
人工智能·opencv·计算机视觉
困死,根本不会2 天前
OpenCV摄像头实时处理:稳定的红绿激光点实时检测工具
笔记·opencv·学习
光羽隹衡2 天前
计算机视觉——Opencv(图像透视变换)
人工智能·opencv·计算机视觉
智驱力人工智能2 天前
无人机目标检测 低空安全治理的工程实践与价值闭环 无人机缺陷识别 农业无人机作物长势分析系统 森林防火无人机火点实时识别
人工智能·opencv·安全·yolo·目标检测·无人机·边缘计算
格林威2 天前
Baumer相机车牌字符分割与识别:优化车牌识别准确率的 7 种方法,附 OpenCV+Halcon 实战代码!
人工智能·opencv·计算机视觉·视觉检测·halcon·工业相机·智能相机
格林威2 天前
Baumer相机系统延迟测量与补偿:保障实时控制同步性的 5 个核心方法,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·工业相机
qwy7152292581632 天前
10-图像的翻转
人工智能·opencv·计算机视觉