Python----计算机视觉处理(Opencv:ROI图像切割)

ROI切割

ROI:Region of Interest,翻译过来就是感兴趣的区域。比如对于一个人的照片,假如我 们要检测眼睛,因为眼睛肯定在脸上,所以我们感兴趣的只有脸这部分,其他都不care,所以可以单独 把脸截取出来,这样就可以大大节省计算量,提高运行速度。

我们在使用OpenCV进行读取图像时,图像数据会被存储为Numpy数组,这也意味着我们可以使用Numpy数组的一些操作来对图像数据进行处理,比如切片是 基于Numpy数组的切片操作来完成的,因此在对应的组件中就需要填我们要切割的ROI区域的坐标来完 成ROI切割操作。

注意:

在OpenCV中,坐标的x轴的正方向是水平向右,y轴的正方向是垂直向下,与数学上的二维坐标 并不相同。

在计算机视觉中,当我们使用OpenCV读取RGB三通道图像时,它会被转换成一个三维的Numpy数组。 这个数组里的每个元素值都表示图像的一个像素值。这个三维数组的第一个维度(即轴0)通常代表图像 的高度,第二个维度(即轴1)代表图像的宽度,而第三个维度(即轴2)代表图像的三个颜色通道 (B、G、R,OpenCV读取到的图像以BGR的方式存储)所对应的像素值。

因此,我们可以通过指定切片的范围来选择特定的高度和宽度区域。

这样,我们就能够获取这个区域内 的所有像素值,即得到了这个区域的图像块,通过Numpy的切片操作,我们就完成了ROI切割的操作。 这种提取ROI的方法允许我们仅获取感兴趣区域内的像素,而忽略其他不相关的部分,从而大大减少数 据处理和存储的负担。

导入模块

python 复制代码
import cv2

读取图像

python 复制代码
img=cv2.imread('lena.png')

获取np图像形状

python 复制代码
img_shape=img.shape
h,w,_=img_shape

设置切割范围

python 复制代码
x_min, x_max = 190, 330
y_min, y_max = 170, 355

对切割区域进行框选

python 复制代码
img_rect=cv2.rectangle(img,(x_min,y_min),(x_max,y_max),(0,0,255),2)

进行切割操作

python 复制代码
img_roi=img[y_min:y_max,x_min:x_max]

输出图像

python 复制代码
cv2.imshow('img_rect', img_rect)
cv2.imshow('img_roi',img_roi)
cv2.waitKey(0)

完整代码

利用try--except来捕获可能出现的异常

python 复制代码
import cv2  # 导入OpenCV库  

# 读取图像  
img = cv2.imread('lena.png')  

# 获取图像的形状(高、宽、通道数)  
img_shape = img.shape  
h, w, _ = img_shape  # h: 高度, w: 宽度, _: 通道数(我们不需要使用它)  

try:  
    # 定义要绘制的矩形区域的坐标  
    x_min, x_max = 190, 330  # 矩形的横坐标范围  
    y_min, y_max = 170, 355  # 矩形的纵坐标范围  

    # 检查定义的坐标是否在图像范围内  
    if not (x_min >= 0 and x_max <= w and y_min >= 0 and y_max <= h):  
        raise OverflowError('over')  # 如果超出范围,抛出异常  

    # 在图像上绘制矩形,颜色为红色(0,0,255),线宽为2  
    img_rect = cv2.rectangle(img, (x_min, y_min), (x_max, y_max), (0, 0, 255), 2)  

    # 从图像中提取感兴趣区域(ROI)  
    img_roi = img[y_min:y_max, x_min:x_max]  

    # 显示绘制了矩形的图像  
    cv2.imshow('img_rect', img_rect)  

    # 显示提取的ROI  
    cv2.imshow('img_roi', img_roi)  

    # 等待用户按键后关闭窗口  
    cv2.waitKey(0)  

except Exception as e:  
    # 捕捉并打印异常信息  
    print(e)  

库函数

cv2.rectangle()

python 复制代码
cv.rectangle(	img, pt1, pt2, color[, thickness[, lineType[, shift]]]	) ->	img
cv.rectangle(	img, rec, color[, thickness[, lineType[, shift]]]	) ->	img

| 函数 | 描述 |
| img | 图像。 |
| pt1 | 矩形的顶点。 |
| pt2 | 与 pt1 相对的矩形的顶点。 |
| color | 矩形颜色或亮度(灰度图像)。 |
| thickness | 构成矩形的线条的粗细。负值(如 FILLED)表示函数必须绘制填充矩形 -1表示实心 1,2,...表示线的粗细 |
| lineType | 线路的类型。 |

shift 点坐标中的小数位数。
相关推荐
天天进步20152 分钟前
Python全栈项目--校园智能宿舍管理系统
开发语言·python
gis分享者4 分钟前
OpenCV 新手入门与实战部署指南
人工智能·opencv·计算机视觉
Ronin30516 分钟前
ToDesk AI如何成为Codex远程控制的国内代替品?
人工智能
测试员周周19 分钟前
【AI测试智能体-面试】AI测试面试60题(附回答思路)
人工智能·python·功能测试·测试工具·单元测试·自动化·测试用例
用户83562907805137 分钟前
使用 Python 操作 Word 评论和回复
后端·python
OpenBayes贝式计算38 分钟前
教程上新丨16GB 笔记本跑出接近 26B MoE 性能,Gemma 4 12B 基于创新架构统一处理文本 / 图像 / 声音三种模态
计算机视觉·google·agent
ShyanZh1 小时前
【skill】Humanizer-zh:24条规则消灭AI写作痕迹
人工智能·ai写作·skill
电商软件开发 小银1 小时前
思域不再安全?AI+独立APP破局指南
人工智能·软件开发·数字化转型·商业模式·超级app·商业思维·ai 矩阵运营
asyxchenchong8881 小时前
最新Hermes Agent 技能封装与科研自动化:以 Meta-Analysis 为例-实现从文献检索到绘图的一站式工作流
运维·人工智能·自动化
武子康1 小时前
调查研究-168 MiroFish 本地化部署分析:主仓库、Zep Cloud、离线 Fork 与真正可控的多智能体沙盘
人工智能·aigc·openai