![OpenCV轻松入门:面向Python(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/266/47382266/b_47382266.jpg)
2.4 感兴趣区域(ROI)
在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区域(Region of Interest,ROI)。在设定感兴趣区域后,就可以对该区域进行整体操作。例如,将一个感兴趣区域A赋值给变量B后,可以将该变量B赋值给另外一个区域C,从而达到在区域C内复制区域A的目的。
例如,在图2-16中,假设当前图像的名称为img,图中的数字分别表示行号和列号。那么,图像中的黑色ROI可以表示为img[200:400,200:400]。
![](https://epubservercos.yuewen.com/D41D8C/26766203101053706/epubprivate/OEBPS/Images/txt002_47.jpg?sign=1739131030-yPL37pCD6LhgflQtYwpKLGLf5l6BJE7v-0-4c1a10c8536eadb67b50191fcba9a830)
图2-16 ROI示例
通过以下语句,能够将图2-16中的黑色ROI复制到该区域右侧:
![](https://epubservercos.yuewen.com/D41D8C/26766203101053706/epubprivate/OEBPS/Images/txt002_48.jpg?sign=1739131030-Jsq8vuCqP9iq05LsxGWqCZ40ElNCbSrw-0-687e9dbe777d179d8824bff2c6541c1d)
上述语句对图2-16的处理结果如图2-17所示,在该区域右侧得到了复制的ROI。
![](https://epubservercos.yuewen.com/D41D8C/26766203101053706/epubprivate/OEBPS/Images/txt002_49.jpg?sign=1739131030-PUSmmWrytOIRm4yNObT3jwuae5bYLU7q-0-8c5d53387145cc41aa0385863271ba61)
图2-17 复制结果
【例2.13】获取图像lena的脸部信息,并将其显示出来。
根据题目要求,编写代码如下:
![](https://epubservercos.yuewen.com/D41D8C/26766203101053706/epubprivate/OEBPS/Images/txt002_50.jpg?sign=1739131030-fvI463QHABp3PW3PZs0UjOUrXlM2itPw-0-ac2f0ba73e83c73ad2b32e9bc3e75cf1)
在本例中,通过face=a[220:400,250:350]获取了一个ROI,并使用函数cv2.imshow()将其显示了出来。
运行上述程序,会得到如图2-18所示的结果,其中图2-18(a)是lena的原始图像,图2-18(b)是从lena图像中获取的脸部图像。
![](https://epubservercos.yuewen.com/D41D8C/26766203101053706/epubprivate/OEBPS/Images/txt002_51.jpg?sign=1739131030-7wYRtR7U78LfgB9cwTs7Ubm52e9ImMaZ-0-aa964832a2d4f7b8d1b7309f817db593)
图2-18 【例2.13】程序的运行结果
【例2.14】对lena图像的脸部进行打码。
根据题目要求,编写代码如下:
![](https://epubservercos.yuewen.com/D41D8C/26766203101053706/epubprivate/OEBPS/Images/txt002_52.jpg?sign=1739131030-hKH0Rnnqvjcx5FDEB90dNgcJpranFvU5-0-3fa8efb7a875f9154a00e5a2126db876)
在本例中,使用随机数生成的三维数组模拟了一幅随机图像,实现了对脸部图像的打码。
运行上述程序,得到如图2-19所示结果,其中图2-19(a)是lena的原始图像,图2-19(b)是脸部打码图像。
![](https://epubservercos.yuewen.com/D41D8C/26766203101053706/epubprivate/OEBPS/Images/txt002_53.jpg?sign=1739131030-TgLb4RgmLqZJaXkmmWAfzlxuFd1spppy-0-4c65b615525f43b83f6a973e088a094b)
图2-19 【例2.14】程序的运行结果
【例2.15】将一幅图像内的ROI复制到另一幅图像内。
根据题目要求,编写代码如下:
![](https://epubservercos.yuewen.com/D41D8C/26766203101053706/epubprivate/OEBPS/Images/txt002_54.jpg?sign=1739131030-jN5kZvZ4LHX648e5dO40jW6E0G8qobiM-0-e062f8516c0cc4f033b4e23fa3ee53c8)
运行上述程序,得到如图2-20所示的结果。其中,图2-20(a)是lena的原始图像,图2-20(b)是dollar图像,图2-20(c)是将lena图像内的ROI复制到dollar图像的效果。
![](https://epubservercos.yuewen.com/D41D8C/26766203101053706/epubprivate/OEBPS/Images/txt002_55.jpg?sign=1739131030-xvpJDlVqXX7kFEomcwzRsq3PtaHjl5vA-0-c63fa43a94c68d2b57f34066f749e97a)
图2-20 【例2.15】程序的运行结果
【提示】表达式“a=img[200:400,200:400]”,一般表述为从“第200行到第400行”,与“第200列到第400列”的交叉区域。上述表达式包含的实际范围是“第200行(包含)到第400行(不包含)”与“第200列(包含)到第400列(不包含)”的交叉区域。也就是说,上述表达式都是包含起始值,不包含终止值的情况。
不同的文献资料,在表述上可能存在差异。也可能将表达式“a=img[200:400,200:400]”表述为其范围是“第200行到第399行”与“第200列到第399列”的交叉区域。