其他分享
首页 > 其他分享> > OpenCV3---Mat对象(复制构造简单图像与获取图像基本参数(行、列、像素值))

OpenCV3---Mat对象(复制构造简单图像与获取图像基本参数(行、列、像素值))

作者:互联网

三、Mat对象(获取图像的基一些基本信息,构造一张简单图像)

1、 获取一张与目标图像大小类型一样的初始化图像

Mat dst;//定义图像名dst
dst = Mat(src.size(), src.type());//使dst与src大小类型一致
dst = Scalar(127, 0, 255);//可以得到一张BGR任意配色的背景图,长度与通道数目一致

2、复制和克隆一张目标图像

Mat dst = src.clone();//克隆图像src给dst
src.copyTo(dst);//复制图像src给dst

3、输出图像的通道数,我们一般看到的彩色图片为3通道的RGB图像,灰度图为单通道图像

cvtColor(src, dst, COLOR_BGR2GRAY);//转灰色
printf("input image channels : %d\n", src.channels());//src的通道数目,最终输出结果为3
printf("input image channels : %d\n", dst.channels());//dst的通道数目,最终输出结果为1

4、获取图像的行数和列数

int cols = dst.cols;//dst的列数
int rows = dst.rows;//dst的行数
printf("rows : %d cols : %d\n", rows, cols);//输出dst的行数和列数

5、获取图像中任意一点像素值

const uchar* firstRow = dst.ptr<uchar>(0);//获取dst第一行的行首指针,若获取其它行首指针,将圆括号中的0改为目标行
printf("first pixel value : %d\n", *firstRow);//获取第一行第一个元素的值,若获取第一行第i个像素值,可以用firstRow[i]

6、构造图像
构造一张简单的单色图像

Mat M(3, 3, CV_8UC3, Scalar(0, 0, 255));//构造一张3*3,像素值为(0,0,255)的图像M,CV_8UC3,8指8位,UC指uchar类型,3指3通道
//Mat M(100, 100, CV_8UC1, Scalar(127));//构造一张100*100单通道的灰度图像M
cout << "M =" << endl << M << endl;//输出看是否和预期一样,可以用来验证算法的正确性,将会输出像素矩阵

构造一张和目标图像大小类型一致的单色图片(create函数的使用)

Mat m1;
m1.create(src.size(), src.type());//使m1与图片src大小类型一致
m1 = Scalar(0, 0, 255);//将m1赋成一位红色的图片

构造一张和目标图像大小类型一致的单色图像(zero函数的使用)

Mat m3 = Mat::zeros(src.size(), src.type());//构造一张和原始图像同大小类型的黑图m3
 //Mat m3 = Mat::zeros(3, 3, CV_8UC1);//另一种方法构造一张3*3的单通道图像
Mat m3 = Mat::eye(2, 2, CV_8UC1);//eye把数组对角线变为1,其它为0 
cout << "m3 =" << endl << m3 << endl;

7、定义小数组

Mat C = (Mat_<double>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
cout << "C =" << endl << " " << C << endl;

输出数组如下:
[010151010]\begin{bmatrix} 0&-1&0\\ -1&5&-1\\ 0&-1&0 \end{bmatrix}⎣⎡​0−10​−15−1​0−10​⎦⎤​

以上步骤运行结果如下所示:

在这里插入图片描述

标签:src,一张,Mat,dst,构造,OpenCV3,图像
来源: https://blog.csdn.net/qq_45646174/article/details/104894066