Mat对象的使用,包括克隆,构造创建等,下面是通过实际代码展示。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;int main(int argc, char** argv)
{
Mat src;
src = imread("C:/Users/Mai/Pictures/ss.jpg");
if (src.empty())
{
cout << "could not load image..." << endl;
}
namedWindow("input",CV_WINDOW_AUTOSIZE);
imshow("input",src);Mat dst;
dst = Mat(src.size(), src.type());
//为Mat赋值
dst = Scalar(127, 0, 255);
namedWindow("out", CV_WINDOW_AUTOSIZE);
imshow("out", dst);//clone~克隆(完全复制,使用拷贝构造函数只拷贝头部,不拷贝数据部分)
dst = src.clone();
src.copyTo(dst);
namedWindow("out", CV_WINDOW_AUTOSIZE);
imshow("out", dst);
//输出图像通道
cvtColor(src, dst, CV_BGR2GRAY);
cout << "input image channels : " << src.channels() << endl;
cout << "output image channels : " << dst.channels() << endl;
//获取图像的数据的指针
const uchar* firstRow = dst.ptr<uchar>(0);
printf("first pixel values : %d\n",*firstRow);//获取图像的宽度和高度
int cols = dst.cols;
int rows = dst.rows;
cout << "row : " << rows << endl;
cout << "col : " << cols << endl;//建立8位3通道的Mat,并打印
Mat M(3, 3, CV_8UC3, Scalar(0, 0, 255));
cout << "M=" << endl << M << endl;//不使用构造函数创建数组
Mat m1;
m1.create(src.size(), src.type());
m1 = Scalar(0, 0, 255);//初始化小矩阵
Mat m2 = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D(src, dst, -1, m2);
namedWindow("out", CV_WINDOW_AUTOSIZE);
imshow("out", dst);//zere和eye的使用
Mat m3 = Mat::zeros(src.size(), src.type());
Mat m4 = Mat::eye(2, 2, CV_8UC1);waitKey(0);
return 0;
}