何为ROI?
ROI:Region of Interest,翻译过来就是感兴趣的区域。什么意思呢?
比如对于一个人的照片,假如我们要检测眼睛,因为眼睛肯定在脸上,所以我们感兴趣的只有脸这部分,其他都不care,所以可以单独把脸的部分截取出来,这样就可以大大节省计算量,提高运行速度。
我们在使用OpenCV进行读取图像时,图像数据会被存储为Numpy数组,ROI切割 原理也是基于Numpy数组的切片操作来完成的,因此在对应的组件中就需要填我们要切割的ROI区域的坐标来完成ROI切割操作。目前只能手动填写坐标,后续深度学习后有其他方法代替。
注意:在OpenCV中,坐标的x轴的正方向是水平向右,y轴的正方向是垂直向下,与数学上的二维坐标并不相同。
示例:
将下面假面骑士天道总司的面部截取出来
代码演示
import cv2
import numpy as np
# 读取一张图片
img = cv2.imread("image/kabuto.jpg")
# 提取该图片的宽高
w, h = img.shape[1], img.shape[0]
#确定目标截取区域
x_min = 280
x_max = 430
y_min = 180
y_max = 390
if x_min<0 or x_max>w or y_min<0 or y_max>h:
print("要切割的区域是不合适的")
else:
# 给要切割的内容画个框
cv2.rectangle(img, (x_min-2, y_min-2), (x_max+2, y_max+2), (0, 0, 255), 2)
# 保存要切割的内容
img_roi = img[y_min:y_max, x_min:x_max]
cv2.imshow('image_rect', img)
cv2.imshow('image_roi', img_roi)
cv2.waitKey(0)