1.opencv中的Mat基本概念
Mat对象OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分。
2.Mat对象构造函数与常用方法
详细的解释参考:https://blog.csdn.net/maweifei/article/details/51221259#commentBox
3.代码实现
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace std;
using namespace cv;
int main()
{
Mat src;
src = imread("D:/demo.jpg");
if (src.empty())
{
cout << "无法找到图像!" << endl;
return -1;
}
//只复制,一般情况下只会复制Mat对象的头和指针部分,不会复制数据部分
Mat A(src);
//完全复制:如果想把Mat对象的头部和数据部分一起复制,可以通过如下两个API实现
Mat B = src.clone();
Mat C;
src.copyTo(C);
//其中前两个参数分别表示行(row)跟列(column)、第三个CV_8UC3中的8表示每个通道占8位、U表示无符号、C表示Char类型、3表示通道数目是3
Mat M(2, 2, CV_8UC3, Scalar(0, 0, 255));
cout << M << endl;
//使用create方法实现建立数组
Mat D;
D.create(3, 3, CV_8UC3);
D = Scalar(1,2,3);
cout << "D = " << endl << " " << D << endl << endl;
uchar* firstRow = D.ptr<uchar>(1);
cout << (int)firstRow[0] << endl;//输出2行1列的像素值
//多维数组的创建
int sz[3] = { 2,2,2 };
Mat L(3, sz, CV_8UC1, Scalar::all(0));
waitKey(0);
return 0;
}