Mat对象
Mat是OpenCV中用来存储图像信息的内存对象,可以理解为一个包含所有强度值的像素点矩阵,另外包含其他信息(宽,高,类型,纬度,大小,深度等)。
当你使用Mat对象时会自动为你分配内存空间,不用再像openCV2.x.x版本之前一样使用IplImage还要自己分配内存空间。
Mat对象使用
首先是最简单的使用:
Mat a; a = imread("...");
定义一个Mat对象a后使用imread函数读取一张图片。
我们还能这样使用Mat:
Mat a,b; a=imread("..."); b=Mat(a.size(),a.type());
首先定义一个Mat对象a并读取一张图片后定义一个Mat对象b,并且这个对象b的大小和格式与a是一样的。
Mat a,b; a=imread("..."); b=Mat(a.size(),a.type()); b=Scalar(255,255,255);
因为我们刚才只是定义了一个Mat对象b的框架所以我们可以使用Scalar函数来让b这个对象生成一张图片,图片的颜色为白色(因为三原色的值都为255所以是白色)。
Mat a,b; a=imread("..."); b=a.clon();
如果我们想要完全复制一张照片要怎么办呢?这时我们就可以使用clon()这个函数了,clon()是全复制你不需要担心因为改变了对象a的数值而会导致对象b的数值随着a改变而改变。
Mat a,b; a = imread(".."); a.copyTo(b);
copyTo()函数和clon()函数也是一样的效果,你可以根据自己的喜好去使用。
Mat a,b; a = imread(".."); cvtColor(a,b,COLOR_BGR2GRAY);
cvtColor()函数可以将a复制到b并且以COLOR_BGR2GRAY的形式展现给你,在这里COLOR_BGR2GRAY是参数名称灰度图的意思。你可以根据需要使用其它参数。
Mat a(3,3,CV_8UC3,Scalar(50,100,200); cout<<a<<endl; namedWindow("test",CV_WINDOW_AUTOSIZE); imshow("test",a);
我们同样可以使用Mat对象创建一个x*x的矩阵,并根据参数CV_8UC3来为它每个像素点来设置数值为(50,100,200)。需要解释一下的是C3代表的是Channel 3,意味着我们这张图片每个像素点有3个通道分别对应的是三原色(RGB),而后面的数值(50,100,200)就是三原色的数值(当然你可以根据需要自己变)。
除了三通道还有一通道,也就是灰度图(还记得上文哪有提到过🐎?)
Mat a = Mat::eye(5, 5, CV_8UC1);
我们可以通过上面这种形式来对对象a进行初始化,这里的eye代表最后出现的矩阵是以对角线形式出现的
你可以修改参数为zeros,这样它就会把矩阵通通初始化为0:
Mat对象差不多就讲到这儿了,光看没有用建议打开电脑自己也来操作一遍这样印象才深刻嗷!