赞
踩
图像在OpenCV中都是通过Mat类来存储的,Mat可以用来表示N维矩阵。
主要包含两部分:
type | attr | 备注 |
---|---|---|
MatAllocator * | allocator | |
const uchar * | dataend | |
const uchar * | datalimit | |
const uchar * | datastart | |
int | flags | |
int | dims | 维数 |
int | rows | 行数 |
int | cols | 列数 |
MatSize | size | 结构体,表示每一行占据的字节数目(包括padding数); image.size().width = image.cols;image.size().height = image.rows |
MatStep | step | |
UMatData * | u | |
uchar * | data | uchar类型的指针,指向Mat数据矩阵的首地址 |
Note:
创建一个5×5×3
的3维矩阵,数据类型为8bit无符号
数,初始值都为(0,0,255)
:
cv::Mat M(5,5, CV_8UC3, cv::Scalar(0,0,255));
其对应的可视化矩阵如下:
这里以 “从M拷贝出N” 为例。
只是新生成一个矩阵头,它的data指针依然指向M.data。
Mat N(M);
or
Mat N = M;
生成一个全新的矩阵:不但拷贝矩阵的头信息,而且会生成一个data的拷贝(即data指针指向不同的地址)。
Mat N = M.clone();
or
Mat N;
M.copyTo(N);
其中,copyTo
函数还可以带有掩码矩阵copyTo(G, maskImage)。
maskImage是一个单通道的矩阵,值为0的位置,在拷贝时候并不会被拷贝到:
这里以二维矩阵为例,若是多维矩阵,则相应增加for循环。
for(i=0; i< M.rows; i++)
{
for(j=0; j<M.cols*M.elemSize(); j++)
{
printf ("%d ", M.data[i*M.cols*M.elemSize() + j]);
}
printf("\n");
}
uchar* p;
for( i = 0; i < M.rows; ++i)
{
// 得到第i行的指针,等价于 p = M.data + i*M.step
p = M.ptr<uchar>(i);
for ( j = 0; j < M.cols; ++j)
{
printf (" %d %d %d",p[j*3], p[j*3+1],p[j*3+2]);
}
printf("\n");
}
也可以用at的方式得到数组元素。
M.atcv::Vec3b(i,j)[2]得到元素中的第2个分量;
如果M.at(i,j),则只能取到元素的第一个分量。
for(i=0; i< M.rows; i++)
{
for(j=0; j<M.cols; j++)
{
printf ("%d %d %d ", M.at<cv::Vec3b>(i,j)[0],M.at<cv::Vec3b>(i,j)[1], M.at<cv::Vec3b>(i,j)[2]);
}
printf("\n");
}
}
cv::MatIterator_<cv::Vec3b> it, end;
for( it = M.begin<cv::Vec3b>(), end = M.end<cv::Vec3b>(); it != end; ++it)
{
printf("%d %d %d\n",(*it)[0], (*it)[1], (*it)[2]);
}
取出矩阵的某个ROI区域,以便进行处理。
cv::Rect rect(50, 50, 100, 100); // 要切取的区域(x1, y1, x2, y2)
srcImage(rect).copyTo(roiImage);
生成一个新矩阵,矩阵的中值为原矩阵中的值乘以alpha,然后再加上beta。
convertTo(OutputArray m, int rtype, double alpha=1, double beta=0 )
例如,实现 M(x,y) = N(x,y) × 10 + 255 :
N.convertTo(M, CV_8U, 10, 255);
[1] cv::Mat Class Reference
[2] OpenCV学习(4) Mat的基本操作(1)
[3] OpenCV学习(5) Mat的基本操作(2)
[4] OpenCV—矩阵数据类型转换cv::convertTo
[5] Opencv Mat矩阵中data、size、depth、elemSize、step等属性的理解
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。