在图像处理领域,我们常常需要设置感兴趣区域(ROI,region of interest),来专注或简化工作过程。

定义ROI区域有两种方法

1:使用表示矩形的区域React。它指定矩形的左上角坐标和矩形的长宽。
2:指定感兴趣行或列的范围(Range)。Range是指从起始索引到终止索引(不包括终止索引)的一连段连续序列。

我们这里来看一个例子,把人脸替换一下,这里涉及到格式的转换,我们来看具体的代码和结果后,再来分析

def roi_test(src, src1):
    face = src1[50:250, 50:250]
    # cv.imshow("face", face)
    gray = cv.cvtColor(face, cv.COLOR_BGR2GRAY) # 转为灰度图像 为二维度
    # print(gray.shape)
    bgr_gray = cv.cvtColor(gray, cv.COLOR_GRAY2BGR) # 转为三通道BGR图像
    src[200:400, 200:400] = bgr_gray
    face = bgr_gray
    cv.imshow("ROI", src)


if __name__ == "__main__":
    src = cv.imread("E:/OpenCv/photo.jpg", 1) #sr->numpy类型
    src1 = cv.imread("E:/OpenCv/CrystalLiu4.jpg", 1)
    gray_src = cv.imread("E:/OpenCv/photo.jpg", 0)
    cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
    cv.imshow("input image", src)
    cv.imshow("input image1", src1)
    roi_test(src, src1)
    cv.waitKey(0)
    cv.destroyAllWindows()

在这里插入图片描述
这里我们对ROI函数进行讲解

 face = src1[50:250, 50:250]
 gray = cv.cvtColor(face, cv.COLOR_BGR2GRAY) # 转为灰度图像 为二维度
 bgr_gray = cv.cvtColor(gray, cv.COLOR_GRAY2BGR) # 转为三通道BGR图像
 src[200:400, 200:400] = bgr_gray
 face = bgr_gray

第二行我们将BGR图像转换为灰度图像,这时候gray为二维度图像,单通道的。
然后我们在将图像转换为BGR的三通道图像,最后我们将我们1图的人脸部分发生替换,就可以替换了。