Python-OpenCV选择、提取感兴趣区域(ROI区域)
2023-09-11 14:15:38 时间
Python-OpenCV选择、提取感兴趣区域(ROI区域)
在图像处理中,我们常常要对某个区域进行选择、提取,然后对这个区域进行单独分析、处理、显示。
这样的区域我们称为叫ROI区域,英文全称为Region of interest,中文名为“感兴趣区域”。
在Python-OpenCV中,图像数据是存储于ndarray对象中的,通常使用ndarray对象的切片操作或索引操作实现选择、提取ROI区域。
关于ndarray对象的切片操作,可以参考我之前的博文 https://www.hhai.cc/thread-117-1-1.html
关于ndarray对象的索引操作,可以参考我的下面两篇博文
对Numpy库ndarray对象(矩阵)中数据元素的访问、选取操作示例
将ndarray对象的数据按索引矩阵进行选取的几种方法
接下来,用几个示例,抛砖引用地讲述“Python-OpenCV选择、提取感兴趣区域(ROI区域)”的问题。
示例一:通过“=”和索引实现ROI区域的浅拷贝
现有矩阵A1,大小为7×7,我要选取其0到3行,0到2列的ROI区域,可以用“=”和索引实现ROI区域的浅拷贝。
示例代码如下:
import numpy as np
A1 = np.zeros((7, 7), dtype='uint8')
# 通过“=”和索引实现ROI区域的浅拷贝
B2 = A1[0:4, 0:3]
B2[1, 1] = 1
运行结果如下:
示例二:通过成员函数copy()实现ROI区域的深拷贝
现有矩阵A1,大小为7×7,我要选取其0到3行,0到2列的ROI区域,可以用成员函数copy()实现ROI区域的浅拷贝。
示例代码如下:
import numpy as np
A1 = np.zeros((7, 7), dtype='uint8')
# 通过“=”和索引实现ROI区域的浅拷贝
B1 = A1[0:4, 0:3]
# 通过函数copy()实现ROI区域的深拷贝
C1 = B1.copy()
C1[1, 1] = 1
运行结果如下图所示:
说明:因为是深拷贝,C1并不与A1和B1共用存储区,所以C1值的改变并不会影响A1和B1。
示例三:通过切片操作将矩阵的ROI区域替换为另一矩阵的值(深拷贝)
代码如下:
import numpy as np
A1 = np.zeros((7, 7), dtype='uint8')
B1 = np.ones((3, 3), dtype='uint8')
A1[1:4, 1:4] = B1
运行结果如下:
上面的结果看不出是深拷贝还是浅拷贝,我们加一条语句就知道了:
import numpy as np
A1 = np.zeros((7, 7), dtype='uint8')
B1 = np.ones((3, 3), dtype='uint8')
A1[1:4, 1:4] = B1
B1[1, 1] = 0
运行结果如下:
从上面的运行结果可知,语句:
A1[1:4, 1:4] = B1
可见实现的是把A1中的子区域的值替换为矩阵B1中的值,而并不是把A1中的子区域的存储空间和B1共享。
相关文章
- Python-OpenCV 图像与视频处理
- Python爬虫之requests库的使用
- Python kafka操作实例(kafka-python)
- python脚本实现集群检测和管理
- 零基础教你快速入门Python怎么学python入门?python新手学习路线
- 如何快速学习python,学好python?能通过Python赚到的第一笔钱,有哪些经验可以分享吗?
- 超全Python学习路线图+14张思维导图,让python初学者不走弯路
- python中base64库用法详解
- 测试Python下载图片的三种方法
- 将OpenCV函数findContours()得到的每一个轮廓单独绘制并保存为图片文件的Python代码
- Python中python-nmap模块的使用
- Python evel函数
- 源码编译vi过程中进行配置时报“checking if compile and link flags for Python are sane... no: PYTHON DISABLED”怎么办?
- 【Python】自动发送邮件
- Python os模块
- Install OpenCV 3.0 and Python 2.7+ on Ubuntu
- Python参数组合
- python正则表达式应用 定义一个函数,求字符串中出现的所有整数之和
- Python数据处理Tips正确的处理数据冲突和样本选取方法
- Python数据处理Tips使用OpenCV预处理图像数据的10种操作
- Python Manim教程大全之 05 动画运行时间 动画方法 (教程含源码)
- Python代码库OpenCV之11 切割碑文
- Python解析SWAN气象雷达数据--(解析、生成ASCII、Image、netCDF)
- python之函数的基础用法
- Python简单实现ATM自动存取款机
- 【Computer Vision学习】基于python的OpenCV的快速入门
- 【Python】:Python import导入上一级目录的文件和模块
- 【Linux学习笔记】解决:yum install python-dev 报错(CentOS安装Python-dev库)
- Python机器学习:使用Pandas进行探索性数据分析 Ⅰ
- Python opencv-python 简单测试