python使用opencv_使用Python OpenCV处理图像之图像感兴趣的区域(ROI)获取

上几篇的内容我们学习了Python使用OpenCV处理图像鼠标及键盘事件的基础方法使用Python OpenCV处理图像之详解使用OpenCV处理键盘鼠标事件及图像像素点内容的获取和设置使用Python OpenCV处理图像之使用OpenCV获取并修改图像的像素值。

今天,我们来了解下对于一幅图像中感兴趣的区域如何获取。

python使用opencv_使用Python OpenCV处理图像之图像感兴趣的区域(ROI)获取_第1张图片如何获取我们感兴趣的内容呢

首先,我们来打开一幅图像。具体代码如下,这里就不做解释了。

import cv2

img = cv2.imread('test.jpg')

对于一幅图像来讲,我们知道图像的表示方式如下图所示。详细内容参见前篇博文。

python使用opencv_使用Python OpenCV处理图像之图像感兴趣的区域(ROI)获取_第2张图片图像像素点的表示方式

当然,对于我们感兴趣的区域就是由一定范围内的许多个像素点来表示。那么,问题来了,如何获得这一区域内容?如何用更加便利的数据结构来表示这一块区域?我们来看一下OpenCV中如何获取这一块区域的内容。其实,原理很简单,就是利用数组切片和索引操作来选择指定区域的内容。我们来看打开的这幅图像的内容。

python使用opencv_使用Python OpenCV处理图像之图像感兴趣的区域(ROI)获取_第3张图片原始图片

如果我们对图片中的小船比较感兴趣,我们觉得这个小船有点孤单,想在小船的旁边在放一只同样大小的小船,我们该如何操作呢?

首先,我们选取感兴趣区域的像素范围,如下图所示。

python使用opencv_使用Python OpenCV处理图像之图像感兴趣的区域(ROI)获取_第4张图片获取感兴趣区域像素范围

然后我们把它裁剪出来,具体代码如下图所示。

img2 = img[357:375, 415:447] # 从ps中获取的内容要横纵坐标转换一下,最终获取到区域像素范围。

获取到这些内容了我们把它放到图片中的指定位置,注意,位置区域大小要和感兴趣的图片区域大小相同,具体打码如下所示。

img[357:375, 445:477] = img2 #直接将img2区域的像素点内容赋值给img中的区域内即可

我们来看下设置效果,如下图所示。

python使用opencv_使用Python OpenCV处理图像之图像感兴趣的区域(ROI)获取_第5张图片实现了感兴趣区域的复制

怎么样?是不是很酷,一只孤单的小船旁边又添加了一只。

python使用opencv_使用Python OpenCV处理图像之图像感兴趣的区域(ROI)获取_第6张图片我们的小船不再孤单了

好了,今天就到这里了,我们主要学习了感兴趣区域ROI的选取过程,并通过一个例子讲解了具体的操作步骤,感兴趣的朋友们自己马上试一试吧。从文中我们看到,对于感兴趣区域的选取,我们只能选择矩形区域内容。而且,当该区域粘贴到指定位置时,和背景图片融合不是很好。有没有好的办法呢?我们下文中会有涉及,欢迎大家留言讨论。

转载请注明出处,百家号:Python高手养成。

你可能感兴趣的:(python使用opencv)