OpenCV_Mat类对象的基本操作常用操作及相关成员函数介绍
Posted 昊虹AI笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV_Mat类对象的基本操作常用操作及相关成员函数介绍相关的知识,希望对你有一定的参考价值。
OpenCV的Mat类有许多成员函数,我们可以利用这些成员函数实现Mat类对象的基本操作、常用操作。
本文列举出Mat类常用的成员函数及其功能。
说明:本文提供的示例代码请到页面 https://www.hhai.cc/thread-75-1-1.html 查看。
目录
- 01-成员函数Mat::row():获取矩阵的某行(与原矩阵共用内存空间)
- 02-成员函数Mat::col():获取矩阵的某列(与原矩阵共用内存空间)
- 03-成员函数Mat::rowRange():获取矩阵的某几行(与原矩阵共用内存空间)
- 04-成员函数Mat::colRange():获取矩阵的某几列(与原矩阵共用内存空间)
- 05-成员函数Mat::clone():创建矩阵或矩阵子矩阵的副本(深拷贝,不与原矩阵共用内存空间)
- 06-成员函数Mat::copyTo():复制矩阵到另一矩阵(深拷贝,不与原矩阵共用内存空间)
- 07-成员函数Mat::convertTo():实现矩阵元素的数据类型的转换
- 08-成员函数Mat::zeros():初始化一个所有元素值都为零的矩阵
- 09-成员函数Mat::ones():初始化一个所有元素值都为1的矩阵
- 10-成员函数Mat::size():获取矩阵的size(列数、行数)
- 11-成员函数Mat:type():)获取矩阵的type
- 12-成员函数Mat:channels():获取矩阵的通道数
- 13-成员函数Mat:at():访问某个矩阵元素的值
- 14-成员函数Mat::depth():获取矩阵元素的数据类型
- 15-成员函数Mat::operator()(const Rect& roi) const:选择ROI区域(感兴趣矩形区域),并实现深拷贝和浅拷贝
01-成员函数Mat::row():获取矩阵的某行(与原矩阵共用内存空间)
成员函数Mat::row()用于获取矩阵的某行(与原矩阵共用内存空间)
01-1 成员函数Mat::row()的简单使用
示例代码请查看本文开头的说明。
示例代码运行结果如下:
01-2 成员函数Mat::row()的应用:实现矩阵的行间运算
示例代码请查看本文开头的说明。
示例代码运行结果如下:
02-成员函数Mat::col():获取矩阵的某列(与原矩阵共用内存空间)
成员函数Mat::col()用于获取矩阵的某列(与原矩阵共用内存空间)
示例代码就不给了,因为这个的使用与上一个成员函数Mat::row()的使用一模一样,只是Mat::col()获取到的是列,而Mat::row()获取到的是行。
03-成员函数Mat::rowRange():获取矩阵的某几行(与原矩阵共用内存空间)
成员函数Mat::rowRange()用于获取矩阵的某几行(与原矩阵共用内存空间)
成员函数Mat::rowRange()的原型如下:
Mat cv::Mat::rowRange(int startrow, int endrow) const
参数startrow和参数endrow设置要选取的连续行区域的起始行和结束行。注意由这两个参数设置选取的行区间[startrow, endrow)是左开右闭区间。举个例子,[0, 2)选取的是第0行和第1行,没有第二行。
示例代码如下:
std::cout << Image1.rowRange(1,4) << std::endl; //输 Image1第一行至第三行的数据
04-成员函数Mat::colRange():获取矩阵的某几列(与原矩阵共用内存空间)
成员函数Mat::colRange()用于获取矩阵的某几列(与原矩阵共用内存空间)
该成员函数与上一个成员函数Mat::rowRange()的使用方法完全一样,这里就不再赘述。
05-成员函数Mat::clone():创建矩阵或矩阵子矩阵的副本(深拷贝,不与原矩阵共用内存空间)
成员函数Mat::clone()用于创建矩阵或矩阵子矩阵的副本(深拷贝,不与原矩阵共用内存空间)
示例代码请查看本文开头的说明。
示例代码运行结果如下:
06-成员函数Mat::copyTo():复制矩阵到另一矩阵(深拷贝,不与原矩阵共用内存空间)
成员函数Mat::copyTo()用于复制矩阵到另一矩阵(深拷贝,不与原矩阵共用内存空间)
示例代码请查看本文开头的说明。
示例代码运行结果如下:
从上面的运行结果我们可以看出函数clone()和函数copyTo()在使用上及效果上几乎是一样的,事实上,这两个函数在使用和效果上几乎也是没有差别的,并且它们都不与原矩阵共用内存空间。
但是它们俩还是有细微的差别,它们俩的细微差别详见链接 https://www.hhai.cc/thread-76-1-1.html
07-成员函数Mat::convertTo():实现矩阵元素的数据类型的转换
成员函数Mat::convertTo()用于实现矩阵元素的数据类型的转换
示例代码请查看本文开头的说明。
示例代码运行结果如下:
从运行结果可以看出,矩阵元素的数据类型被转换了。
08-成员函数Mat::zeros():初始化一个所有元素值都为零的矩阵
可利用Mat类的成员函数Mat::zeros()实现初始化一个所有元素值都为零的矩阵,详细介绍请参看链接 https://www.hhai.cc/thread-71-1-1.html
09-成员函数Mat::ones():初始化一个所有元素值都为1的矩阵
可利用Mat类的成员函数Mat::ones()实现初始化一个所有元素值都为1的矩阵,成员函数Mat::ones()的使用与上一个Mat::zeros()的使用完全相同,这里就不再详细介绍了。
10-成员函数Mat::size():获取矩阵的size(列数、行数)
可利用Mat类的成员函数Mat::size()获取矩阵的size(列数、行数),详细介绍请参看链接 https://www.hhai.cc/thread-78-1-1.html
11-成员函数Mat:type():)获取矩阵的type
可利用Mat类的成员函数Mat:type()获取矩阵的type,详细介绍请参看链接 https://www.hhai.cc/thread-78-1-1.html
12-成员函数Mat:channels():获取矩阵的通道数
可利用Mat类的成员函数Mat:channels()获取矩阵的通道数,详细介绍请参看链接 https://www.hhai.cc/thread-78-1-1.html
13-成员函数Mat:at():访问某个矩阵元素的值
可利用Mat类的成员函数Mat:at()访问某个矩阵元素的值。
格式为M.at(i,j)
示例:
image.at(i,j):取出灰度图像image中第i行第j列点的像素值;
image.at(i,j)[k]:取出彩色图像image第k通道中第i行第j列点的像素值。
如何想了解“Vec3b”为何物,可以参考链接 https://www.hhai.cc/thread-80-1-1.html
注意:函数at()的第一个参数代表行索引,第二个参数代表列索引。
示例代码请查看本文开头的说明。
示例代码运行结果如下:
14-成员函数Mat::depth():获取矩阵元素的数据类型
可利用Mat类的成员函数Mat::depth()获取矩阵元素的数据类型,详细介绍请参看链接 https://www.hhai.cc/thread-78-1-1.html
15-成员函数Mat::operator()(const Rect& roi) const:选择ROI区域(感兴趣矩形区域),并实现深拷贝和浅拷贝
可利用Mat类的成员函数Mat::operator()(const Rect& roi) const选择ROI区域(感兴趣矩形区域)。
operator()表示Mat类对运算符()的重载,关于运算符重载,可以参见博文 https://www.hhai.cc/thread-81-1-1.html
关于const的含义,可以参见博文 https://www.hhai.cc/thread-82-1-1.html
15-1 深拷贝ROI区域
深拷贝ROI区域示例代码:
//利用Rect选择区域(100, 180, 150, 50)
int xRoi = 80;
int yRoi = 180;
int widthRoi = 150;
int heightRoi = 100;
srcImage(cv::Rect(xRoi,yRoi,widthRoi,heightRoi)).copyTo(roiImage);
上面的代码实现了把srcImage中的区域(100, 180, 150, 50)深拷贝到给了roiImage。
ROI区域:cv::Rect(xRoi,yRoi,widthRoi,heightRoi)代表下面这个矩形:
矩形区域左上角顶点的坐标为(100, 180)
矩形区域在x方向上的长度为150;
矩形区域在y方向上长度为180;
15-2 浅拷贝ROI区域
浅拷贝ROI区域的示例代码请查看本文开头的说明。
示例代码运行结果如下:
从上面的运行结果来看,对浅拷贝对象A1_roi的修改也会影响到A1中相应元素的值。
15-3 将一个矩阵(图像)复制到另一矩阵(图像)的指定区域(ROI)【深拷贝】
这里给一个示例代码,代码将B1的数据复制到了A1中的指定区域。
具体的代码请请查看本文开头的说明。
示例代码运行结果如下:
以上是关于OpenCV_Mat类对象的基本操作常用操作及相关成员函数介绍的主要内容,如果未能解决你的问题,请参考以下文章