【OpenCV 例程300篇】09. 图像的裁剪(cv2.selectROI)

本文介绍了如何使用OpenCV进行图像裁剪,包括通过Numpy切片方法和cv2.selectROI函数选择感兴趣区域(ROI)。示例代码详细展示了如何指定矩形区域进行裁剪,并通过cv2.imshow显示裁剪结果。同时强调了使用.copy()深拷贝以避免原始图像被修改的重要性。
摘要由CSDN通过智能技术生成

专栏地址:『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 多维数组

注意事项:

  1. Numpy 多维数组的切片是原始数组的浅拷贝,切片修改后原始数组也会改变。推荐采用 .copy() 进行深拷贝,得到原始图像的副本。
  2. 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)  # 等待按键命令

扩展例程:
函数 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章:图像的基本操作】
06. 像素的编辑(img.itemset)
07. 图像的创建(np.zeros)
08. 图像的复制(np.copy)
09. 图像的裁剪(cv2.selectROI)
10. 图像的拼接(np.hstack)


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125112487)
Copyright 2022 youcans, XUPT
Crated:2021-11-18

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youcans_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值