专栏地址:『youcans 的 OpenCV 例程 300 篇』
【OpenCV 例程300篇】09. 图像的裁剪(cv2.selectROI)
用 Numpy 的切片方法可以进行图像的裁剪,操作简单方便。
方法说明:
retval = img[y:y+h, x:x+w].copy()
- 对图像 img 裁剪并返回指定的矩阵区域图像。
参数说明:
- img:图像数据,nparray 多维数组
- x, y:整数,像素值,裁剪矩形区域左上角的坐标值
- w, h:整数,像素值,裁剪矩形区域的宽度、高度
- 返回值 retval:裁剪后获得的 OpenCV 图像,nparray 多维数组
注意事项:
- Numpy 多维数组的切片是原始数组的浅拷贝,切片修改后原始数组也会改变。推荐采用 .copy() 进行深拷贝,得到原始图像的副本。
- Numpy 数组切片,当上界或下界为数组边界时可以省略,如:img[y:, :x] 表示高度方向从 y 至图像底部(像素ymax),宽度方向从图像左侧(像素 0)至 x。
基本例程:
# 1.16 图像的裁剪
img1 = cv2.imread("../images/imgLena.tif", flags=1) # flags=1 读取彩色图像(BGR)
xmin, ymin, w, h = 180, 190, 200, 200 # 矩形裁剪区域 (ymin:ymin+h, xmin:xmin+w) 的位置参数
imgCrop = img1[ymin:ymin+h, xmin:xmin+w].copy() # 切片获得裁剪后保留的图像区域
cv2.imshow("DemoCrop", imgCrop) # 在窗口显示 彩色随机图像
key = cv2.waitKey(0) # 等待按键命令
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
扩展例程:
函数 cv2.selectROI() 可以通过鼠标选择感兴趣的矩形区域(ROI)。
cv2.selectROI(windowName, img, showCrosshair=None, fromCenter=None):
使用 cv2.selectROI(),可以实现对 ROI 的裁剪,详见例程 1.17。
# 1.17 图像的裁剪 (ROI)
img1 = cv2.imread("../images/imgLena.tif", flags=1) # flags=1 读取彩色图像(BGR)
roi = cv2.selectROI(img1, showCrosshair=True, fromCenter=False)
xmin, ymin, w, h = roi # 矩形裁剪区域 (ymin:ymin+h, xmin:xmin+w) 的位置参数
imgROI = img1[ymin:ymin+h, xmin:xmin+w].copy() # 切片获得裁剪后保留的图像区域
cv2.imshow("DemoRIO", imgROI)
cv2.waitKey(0)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
(本节完)