图像感兴趣区域ROI

Python截取图片区域并保存03


目录

Python截取图片区域并保存03

前言

选择某区域并复制到图片的另一区域

总结


前言

上一节其实实现了图像区域的截取及保存。

关于ROI的截取,看资料上只有两行代码。之前一直不是很清楚怎么填写区域坐标,这里特意记录一下。


选择某区域并复制到图片的另一区域

1. 如果不清楚坐标,可以用画图打开图片,把鼠标放在图片上,即可在画图的左下角看到坐标点,如下图,红色圈出来的地方

 2. 现在已经知道了怎么看ROI区域左上角的坐标和右下角的坐标了。接下来就可以通过代码实现ROI复制到图片的另一个区域和ROI的截取保存。

import cv2 as cv

img = cv.imread("test.png")
ball = img[339: 403, 125: 195]
# print(ball.shape)
img[329: 329 + ball.shape[0], 605: 605 + ball.shape[1]] = ball
# print(img[329:393, 605:675].shape)
cv.imshow("ball", img)
cv.imwrite("t1.png", ball)
cv.waitKey(0)


总结

关键是ROI的坐标img[top_y : bottom_y, top_x : bottom_x]

需要复制到图片的坐标img[top_y : top_y + ROI的高度, top_x : top_x + ROI的宽度]

ROI的高度: 源码中的ball.shape[0]

ROI的高度: 源码中的ball.shape[1]

img.shape: 输出图片的形状,高度,宽度,通道数(不是彩色图片,则不显示通道数)

### 如何使用 OpenCV 设置和操作图像 ROI 区域 #### 使用切片操作定义 ROI 在 OpenCV 中,可以通过简单的切片操作来定义感兴趣区域 (ROI),这允许直接访问图像中的特定部分。下面是一个具体的例子: ```python import cv2 # 读取图像 image = cv2.imread('image.jpg') # 定义一个矩形ROI x, y, w, h = 100, 50, 200, 150 roi = image[y:y+h, x:x+w] # 显示ROI cv2.imshow('ROI', roi) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段代码展示了如何利用坐标参数 `x`, `y` 和宽度高度 `w`, `h` 来指定感兴趣的子图,并将其作为新的变量保存下来[^1]。 #### 在原图像中标记 ROI 区域 为了更直观地查看所选的 ROI,在原始图片上画出边界框是一种常见做法。这里展示了一个实例: ```python import cv2 image = cv2.imread('1.bmp') roi_rect = (140, 85, 360, 390) x, y, w, h = roi_rect cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) cv2.imshow('ROI Image', image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 此段脚本会在给定位置绘制绿色边界的矩形框以突出显示选定的 ROI 部分[^2]。 #### 动态选择和绘制 ROI 对于更加灵活的应用场景,比如用户交互式的选取 ROI,则可以采用 `cv2.selectROI()` 方法让用户手动圈定目标范围。该功能特别适用于实时视频流处理或需要精确控制的情况[^3]。 #### 复制与裁剪 ROI 区域 当涉及到对某个特定区域内像素的操作时,可以直接对该区域进行复制或者进一步加工。例如,提取并独立处理某一部分的内容: ```cpp // 对于旧版 C API 的情况 cvSetImageROI(IplImage* src,CvRect rect); IplImage *subimg=cvCreateSubImage(src); // 取消当前设置的ROI cvResetImageROI(IplImage* src); ``` 需要注意的是上述代码片段属于较早版本的接口调用方式;而在 Python 版本中推荐的做法仍然是基于 NumPy 数组索引来完成相同的功能[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值