在图像处理领域,我们常常需要设置感兴趣区域(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图的人脸部分发生替换,就可以替换了。