cv::Mat的构造函数
#将img中的data()重新组成一个mat
unsigned char *pImgData;
cv::Mat mat(height, width, CV_8UC3, (void*)pImgData);
#将模型推理的结果,多维float型数组,组成一个mat
std::vector<int> shapes={1,22600,6};
cv::Mat feat = cv::Mat(shapes, CV_32F, (float*)rawOutput);
获取该mat的尺寸
int size0=feat.size[0];
int size1=feat.size[1];
int size2=feat.size[2];
#新建一个值全为0的彩色mat
cv::Mat image(infer_h, infer_w, CV_8UC3, cv::Scalar(0, 0, 0));
#新建一个值全为0的灰度mat
cv::Mat mask(height, width, CV_8UC1, cv::Scalar(0));
cv::Mat的拷贝
// m声明并初始化
cv::Mat m1(m); // 拷贝构造函数,浅拷贝,仅是创建了Mat的头部分,m1与m共享数据区
cv::Mat m2 = m; // 重载运算符=,浅拷贝
cv::Mat m3 = m.clone(); // clone函数,深拷贝,m3与m有各自独立的数据区
cv::Mat m4;
m.copyTo(m4); // copyTo函数,深拷贝
判断图像是否为空
if (src.empty()) {
cout << "打开错误" << endl;
return -1;
}
split和merge函数
void split(InputArray m, OutputArrayOfArrays mv);
void merge(InputArrayOfArrays mv, OutputArray dst);
通过split函数将cv::Mat分为多个通道
cv::Mat img = cv::imread(imgpath);
std::vector<cv::Mat> channels;
cv::split(img, channels);
通过merge函数将多个单通道的cv::Mat的指针组成一个3通道的cv::Mat
unsigned char* imageDataR;
unsigned char* imageDataG;
unsigned char* imageDataB;
cv::Mat img_r(height, width, CV_8UC1, imageDataR);
cv::Mat img_g(height, width, CV_8UC1, imageDataG);
cv::Mat img_b(height, width, CV_8UC1, imageDataB);
std::vector<cv::Mat> channels;
channels.push_back(img_b);
channels.push_back(img_g);
channels.push_back(img_r);
cv::Mat img;
cv::merge(channels, img);