![OpenCV轻松入门:面向Python](https://wfqqreader-1252317822.image.myqcloud.com/cover/910/26297910/b_26297910.jpg)
2.4 感兴趣区域(ROI)
在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区域(Region of Interest, ROI)。在设定感兴趣区域ROI后,就可以对该区域进行整体操作。例如,将一个感兴趣区域A赋值给变量B后,可以将该变量B赋值给另外一个区域C,从而达到在区域C内复制区域A的目的。
例如,在图2-16中,假设当前图像的名称为img,图中的数字分别表示行号和列号。那么,图像中的黑色ROI可以表示为img[200:400, 200:400]。
![](https://epubservercos.yuewen.com/53BA2F/14737439604468406/epubprivate/OEBPS/Images/Figure-0046-0027.jpg?sign=1739232936-1M4dKAj9l28pFAmFUDBAiN5V5eKO0RNW-0-b96f44817fd1288f6b5ffec1c541b400)
图2-16 ROI示例
通过以下语句,能够将图2-16中的黑色ROI复制到该区域右侧:
a=img[200:400,200:400] img[200:400,600:800]=a
上述语句对图2-16的处理结果如图2-17所示,在该区域右侧得到了复制的ROI。
![](https://epubservercos.yuewen.com/53BA2F/14737439604468406/epubprivate/OEBPS/Images/Figure-0047-0028.jpg?sign=1739232936-Z0tEmaxmOnROsQEQYYhhWWpuNiTc4dxT-0-a464bb78bf2a936e90e3109ee3f16792)
图2-17 复制结果
【例2.13】获取图像lena的脸部信息,并将其显示出来。
根据题目要求,编写代码如下:
import cv2 a=cv2.imread("lenacolor.png", cv2.IMREAD_UNCHANGED) face=a[220:400,250:350] cv2.imshow("original", a) cv2.imshow("face", face) cv2.waitKey() cv2.destroyAllWindows()
在本例中,通过face=a[220:400,250:350]获取了一个ROI,并使用函数cv2.imshow()将其显示了出来。
运行上述程序,会得到如图2-18所示的结果,其中左图是lena的原始图像,右图是从lena图像中获取的脸部图像。
![](https://epubservercos.yuewen.com/53BA2F/14737439604468406/epubprivate/OEBPS/Images/Figure-0047-0029.jpg?sign=1739232936-oVXo5eJVv3dhqkBHzMHkw2vTINYHJDct-0-4cd8096d95bb853980c6830776ab9650)
图2-18 【例2.13】程序的运行结果
【例2.14】对lena图像的脸部进行打码。
根据题目要求,编写代码如下:
import cv2 import numpy as np a=cv2.imread("lenacolor.png", cv2.IMREAD_UNCHANGED) cv2.imshow("original", a) face=np.random.randint(0,256, (180,100,3)) a[220:400,250:350]=face cv2.imshow("result", a) cv2.waitKey() cv2.destroyAllWindows()
在本例中,使用随机数生成的三维数组模拟了一幅随机图像,实现了对脸部图像的打码。
运行上述程序,得到如图2-19所示结果,其中左图是lena的原始图像,右图是脸部打码图像。
![](https://epubservercos.yuewen.com/53BA2F/14737439604468406/epubprivate/OEBPS/Images/Figure-0048-0030.jpg?sign=1739232936-Sh3uDFRKrK9jTEbGyhv4eaE6y8yRM6Je-0-20f3bc42da38c1d59fe4f1bf495d1425)
图2-19 【例2.14】程序的运行结果
【例2.15】将一幅图像内的ROI复制到另一幅图像内。
根据题目要求,编写代码如下:
import cv2 lena=cv2.imread("lena512.bmp", cv2.IMREAD_UNCHANGED) dollar=cv2.imread("dollar.bmp", cv2.IMREAD_UNCHANGED) cv2.imshow("lena", lena) cv2.imshow("dollar", dollar) face=lena[220:400,250:350] dollar[160:340,200:300]=face cv2.imshow("result", dollar) cv2.waitKey() cv2.destroyAllWindows()
运行上述程序,得到如图2-20所示的结果。其中,左图是lena的原始图像,中间的图是dollar图像,右图是将lena图像内的ROI复制到dollar图像的效果。
![](https://epubservercos.yuewen.com/53BA2F/14737439604468406/epubprivate/OEBPS/Images/Figure-0049-0031.jpg?sign=1739232936-SAwXn8gig1uICIPbS3c0HE7Bl16QQrRN-0-288021f8dd43d5adaeac83571be4931d)
图2-20 【例2.15】程序的运行结果