1 前言
将介绍几种Mat对象的创建方式,以及Scalar函数的功能。相关API:
- Scalar()
- Size()
- Mat()
- Mat::zeros()
- Mat对象.clone()
- Mat对象.copyTo()
2 代码及内容
#include "iostream"
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(int argc,char *argv)
{
//Scalar函数的运用。
//创建大小为256x256的,8位无符号单通道图像(灰度图像)
Mat t1 = Mat(256, 256, CV_8UC1);
//设置全体像素通道的值,单通道只设置一个值,0为黑。
t1 = Scalar(0);
imshow("黑图", t1);
//创建大小为512x512的,8位无符号三通道图像(彩色图像)
Mat t2 = Mat(Size(512, 512), CV_8UC3);
//设置全体像素通道的值,三通道设置三个值(BGR),0,0,255为红。
t2 = Scalar(0, 0, 255);
imshow("红图", t2);
//Mat对象的多种创建方式
//第一种
Mat t3 = Mat(256, 256, CV_8UC1);
//第二种,Size()的使用
Mat t4= Mat(Size(512, 512), CV_8UC3);
//第三种,zeros()的使用,让创建的图像像素值起始为0
Mat t5 = Mat::zeros(Size(256, 256), CV_8UC3);
//第四种,依靠别的图来创建
Mat t6 = t5; //1、t6与t5实际上是同一幅图,修改其中任意一个都会影响到另一个
Mat t7 = t5.clone();//2、t7和t5是两幅图,互不影响。
t5.copyTo(t7); //3、效果和2是一样的,互不影响。
//第五种,创建了一个大小和t5完全一样的像素值为0的图(黑图)
Mat t8 = Mat::zeros(t5.size(), t5.type());
waitKey(0);
destroyAllWindows();
return 0;
}
需要注意:
- Scalar函数的参数问题,要根据图像的通道数量来决定参数数量。以及在三个通道时,其参数排序为BGR。
- 几种Mat的创建方式。尤其是图像的复制问题,要知道哪种方式才是真正的复制。以及代码中第五种创建方式,为什么大小是一样的要知道,因为尺寸一样,且图片类型一样即每个像素的通道数和每个通道的位数一样,所以大小才一样。
3 结束语
没啦。