图像识别与处理之Opencv——选取图像局部区域
来源:互联网 发布:海康无网络视频 编辑:程序博客网 时间:2024/06/05 16:44
选取图像局部区域
Mat 类提供了多种方便的方法来选择图像的局部区域。 使用这些方法时需要注意,这些方法并不进行内存的复制操作。如果将局部区域赋值给新的 Mat 对象,新对象与原始对象共用相同的数据区域,不新申请内存,因此这些方法的执行速度都比较快。
1 单行或单列选择
提取矩阵的一行或者一列可以使用函数 row()或 col()。函数的声明如下:
Mat Mat::row(int i) constMat Mat::col(int j) const
参数 i 和 j 分别是行标和列标。例如取出 A 矩阵的第 i 行可以使用如下代码:
Mat line = A.row(i);
例如取出 A 矩阵的第 i 行,将这一行的所有元素都乘以 2,然后赋值给第 j行,可以这样写:
A.row(j) = A.row(i)*2;
2 用 Range 选择多行或多列
Range 是 OpenCV 中新增的类,该类有两个关键变量 star 和 end。 Range 对象可以用来表示矩阵的多个连续的行或者多个连续的列。其表示的范围为从 start到 end,包含 start,但不包含 end。 Range 类的定义如下:
class Range{public:...int start, end;};
Range 类还提供了一个静态方法 all(),这个方法的作用如同 Matlab 中的“:”,表示所有的行或者所有的列。
//创建一个单位阵Mat A = Mat::eye(10, 10, CV_32S);//提取第 1 到 3 列(不包括 3)Mat B = A(Range::all(), Range(1, 3));//提取 B 的第 5 至 9 行(不包括 9)//其实等价于 C = A(Range(5, 9), Range(1, 3))Mat C = B(Range(5, 9), Range::all());
3 任意感兴趣区域
从图像中提取感兴趣区域(Region of interest) 有两种方法,一种是使用构造函数,如下例所示:
//创建宽度为 320,高度为 240 的 3 通道图像Mat img(Size(320,240),CV_8UC3);//roi 是表示 img 中 Rect(10,10,100,100)区域的对象Mat roi(img, Rect(10,10,100,100));
除了使用构造函数,还可以使用括号运算符, 如下:
Mat roi2 = img(Rect(10,10,100,100));
当然也可以使用 Range 对象来定义感兴趣区域,如下:
//使用括号运算符Mat roi3 = img(Range(10,100),Range(10,100));//使用构造函数Mat roi4(img, Range(10,100),Range(10,100));
4 取对角线元素
矩阵的对角线元素可以使用 Mat 类的 diag()函数获取,该函数的定义如下:
Mat Mat::diag(int d) const
参数 d=0 时,表示取主对角线;
当参数 d>0 时,表示取主对角线下方的次对角线,如 d=1 时,表示取主对角线下方,且紧贴主多角线的元素;
当参数 d<0 时,表示取主对角线上方的次对角线。
如同 row()和 col()函数, diag()函数也不进行内存复制操作,其复杂度也是 O(1)。
- 图像识别与处理之Opencv——选取图像局部区域
- 图像识别与处理之Opencv——Mat类
- OpenCV入门教程(3)-Mat类之选取图像局部区域
- 图像识别与处理之Opencv——图像数据获取与存储(imread()和imwrite()函数)
- 图像识别与处理之Opencv——Mat_类与Mat 类的内存管理
- 图像识别与处理之Opencv——像素值的读写
- 图像识别与处理之Opencv——基本数据结构及示例
- 图像识别与处理之Opencv——常用的OpenCV2函数速查
- 图像识别与处理之Opencv——高斯滤波及GaussianBlur()函数
- OpenCV设置感兴趣区域ROI,对图像进行局部处理
- opencv 鼠标选取图像感兴趣区域
- OpenCV学习笔记四(2016年12月5日)选取图像局部区域
- 图像识别与处理之Opencv——Mat表达式的运算(矩阵的一些运算)
- 图像识别与处理之Opencv——霍夫变换编程思路(11月2日暂存)
- 图像识别与处理之Opencv——高斯滤波GaussianBlur() 11月2日暂存
- OpenCV图像处理——人脸表情识别
- 图像处理与识别
- 图像处理与识别
- AVL树的C++实现
- 数据结构实验二
- 【论文笔记】Question Answering with Subgraph Embeddings
- Ajax创建案例
- 20171101
- 图像识别与处理之Opencv——选取图像局部区域
- 阿里中间件需要怎样的架构师
- 设置 UINavigationBar 全局颜色,背景颜色,前景颜色 swift 3 4 ios 10 +
- leetcode Combinations
- 20171031|课堂作业01 业务类抽象
- 递归
- 15.32
- Latex中文处理
- (已解决)UVA11642 Fire!(两次BFS~)