Mat类构造函数:
类详细解释参见:https://blog.csdn.net/qq_37406130/article/details/78725406
1、Mat::Mat()
无参数构造方法;
2、Mat::Mat(int rows, int cols, int type)
创建行数为 rows,列数为 col,类型为 type 的图像;
3、Mat::Mat(Size size, int type)
创建大小为 size,类型为 type 的图像;
4、Mat::Mat(int rows, int cols, int type, const Scalar& s)
创建行数为 rows,列数为 col,类型为 type 的图像,并将所有元素初始化为值 s;
5、Mat::Mat(Size size, int type, const Scalar& s)
创建大小为 size,类型为 type 的图像,并将所有元素初始化为值 s;
6、Mat::Mat(const Mat& m)
将m赋值给新创建的对象,此处不会对图像数据进行复制,m和新对象共用图像数据,属于浅拷贝;
7、Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
创建行数为rows,列数为col,类型为type的图像,此构造函数不创建图像数据所需内存,而是直接使用data所指内存,图像的行步长由 step指定。
8、Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP)
创建大小为size,类型为type的图像,此构造函数不创建图像数据所需内存,而是直接使用data所指内存,图像的行步长由step指定。
9、Mat::Mat(const Mat& m, const Range& rowRange, const Range& colRange)
创建的新图像为m的一部分,具体的范围由rowRange和colRange指定,此构造函数也不进行图像数据的复制操作,新图像与m共用图像数据;
10、Mat::Mat(const Mat& m, const Rect& roi)
创建的新图像为m的一部分,具体的范围roi指定,此构造函数也不进行图像数据的复制操作,新图像与m共用图像数据。
#include<iostream>
#include"opencv2/imgproc/imgproc.hpp"
#include"opencv2/highgui/highgui.hpp"
using namespace cv;
void main()
{
Mat image1;
Mat image2(100, 100, CV_8UC3);//创建100*100 无符号8位 3通道矩阵
image1.create(100, 100, CV_8UC1);//用create 创建100*100 无符号8位 单通道矩阵
Mat image_white(100, 100, CV_8UC1, Scalar(255));//创建100*100白色矩阵
Mat image_black(100, 100, CV_8UC1, Scalar(0));//创建100*100 黑色矩阵
Mat zero_image3 = cv::Mat::zeros(100, 100, CV_8UC1);
//用zeros 创建 100*100 无符号8位单通道 0矩阵
Mat ones_image4 = cv::Mat::ones(100, 100, CV_8UC1);
//用ones 创建100*100 无符号8位单通道 1矩阵
namedWindow("zeros");
namedWindow("ones");
imshow("zeros", zero_image3);
imshow("ones", ones_image4);
imshow("white", image_white);
imshow("black", image_black);
waitKey(-1);
}
灰度图一般用8UC1来储存
Mat_类
https://blog.csdn.net/shenwanjiang111/article/details/54319630