关于OpenCV中Mat对象

一.各种初始化

1.Mat()

	//1.Mat()
	Mat p1 = Mat();
	cout << p1;
	namedWindow("output1");
//	imshow("output1", p1);

运行结果:
关于OpenCV中Mat对象_第1张图片
若去掉、// imshow(“output1”, p1);的注释就会报错,(以后补充)

2.Mat(Size size, int type)

	//2.Mat(Size size, int type)
	Mat p2;
	p2 = Mat(src.size(), src.type());
	cout << src.size() << endl << src.type() << endl;
	p2 = Scalar(0, 0, 255);
	cout << p2 << endl;
	namedWindow("output2");
	imshow("output2", p2);

关于OpenCV中Mat对象_第2张图片
关于OpenCV中Mat对象_第3张图片

3.最常用的 Mat(int rows,int cols, int type, const Scalar &s)
type 详解 CV_[位数][带符号与否][类型前缀]C[通道数]
eg: CV_8UC3 表示使用 8位的unsigned char 型 每个像素由三个通道组成

//3.Mat(int rows,int cols, int type, const Scalar &s)
	Mat p3 = Mat(3, 3, CV_8UC3, Scalar(0, 0, 255));
	cout << p3 << endl;
	namedWindow("output3");
	imshow("output3", p3);

关于OpenCV中Mat对象_第4张图片
4..用create函数** 此方法不能赋初值

//4.create
	Mat p4;
	p4.create(4, 4, CV_8UC2);
	p4 = Scalar(0, 0);
	cout << p4 << endl;
	namedWindow("output4");
	
	imshow("output4", p4);

imshow的时候出错了

关于OpenCV中Mat对象_第5张图片

5.Matlab式的初始化方式

    Mat p5 = Mat::eye(4, 4, CV_64F);
	cout << "p5 = " << endl << p5 << endl;

	Mat p6 = Mat::ones(2, 2, CV_32F);
	cout << "p6 = " << endl << p6 << endl; 
	
	Mat p7 = Mat::zeros(3, 3, CV_64F);
	cout << "p7 = " << endl << p7 << endl;

关于OpenCV中Mat对象_第6张图片

   namedWindow("output5");
	imshow("output5", p5);

	namedWindow("output6");
	imshow("output6", p6);

	namedWindow("output7");
	imshow("output7", p7);

正常显示

6.通过构造函数进行初始化(制定维数, 传递一个指向数组的指针(这个数组包含每个维度的尺寸),type类型, Scalar)

    int sz[2] = { 2, 2 };
	Mat p8(2, sz, CV_8UC1, Scalar::all(0));
	cout << p8 << endl;
	namedWindow("output8");
	imshow("output8", p8);

关于OpenCV中Mat对象_第7张图片
若为三维显示输出就会报错(可以定义,应该是不能这样输出)
关于OpenCV中Mat对象_第8张图片
7.定义数组的形式

    Mat p9 = (Mat_(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
	cout << p9 << endl;
	namedWindow("output9");
	imshow("output9", p9);

关于OpenCV中Mat对象_第9张图片

二, 对mat对象的使用

1.部分复制 一般情况下只会复制头和指针,不会复制数据部分

2.完全复制 连同数据部分一起复制

//部分复制
	Mat a = imread("E://VS-pro//images//zhu.jpg");
	Mat b(a);

	//完全复制
	Mat c = a.clone();
	Mat d;
	//Mat mask = Mat::ones(a.cols, a.rows, CV_8UC1);
	a.copyTo(d);



	namedWindow("outputa");
	imshow("outputa", a);

	namedWindow("outputb");
	imshow("outputb", b);

	namedWindow("outputc");
	imshow("outputc", c);

	namedWindow("outputd");
	imshow("outputd", d);

部分复制中 使用它们中的任何一个进行修改也会影响所有其他的。在实践中,不同的对象只是向相同的底层数据提供不同的访问方法。
修改前
关于OpenCV中Mat对象_第10张图片
修改后

    Mat kernel = (Mat_(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
	filter2D(a, b, -1, kernel);

	filter2D(d, c, -1, kernel);

	namedWindow("outputa1");
	imshow("outputa1", a);

	namedWindow("outputb1");
	imshow("outputb1", b);

	namedWindow("outputc1");
	imshow("outputc1", c);

	namedWindow("outputd1");
	imshow("outputd1", d);

a随b变而变了 c变了 d没变

今日完结撒花==

你可能感兴趣的:(opencv)