opencv:图像对象的创建与赋值(三)

文章目录

  • 一、Mat基本结构
  • 二、Mat操作
    • 1.创建mat


一、Mat基本结构

头部:图像的属性(宽高,大小,通道数等等)
数据部分:图像数据部分
当把mat数据赋值给另一个mat数据,仅仅只是指针的重新指向,克隆和拷贝才会创建一个新的mat
opencv:图像对象的创建与赋值(三)_第1张图片

二、Mat操作

1.创建mat

using namespace std;
using namespace cv;

class QuickDemo
{
public:

	void mat_creation_Demo(Mat& image) 
	{
		Mat dst1, dst2;
		dst1 = image.clone();
		image.copyTo(dst2);
		Mat dst_zeros = Mat::zeros(Size(200, 200), CV_8UC1);
		imshow("dst_zeros", dst_zeros);

		Mat dst_ones = Mat::ones(Size(200, 200), CV_8UC1); //单通道会全是1,但是3通道会出错,只在每个像素的第一个通道为 1
		imshow("dst_ones", dst_ones);


		Mat dst_init_1 = Mat::zeros(Size(200, 200), CV_8UC3); //每个像素的第一个通道为 127
		dst_init_1 = 127;
		imshow("dst_init_1", dst_init_1);

		Mat dst_init_3 = Mat::zeros(Size(200, 200), CV_8UC3); //三个通道都为 127
		dst_init_3 = Scalar{127, 127, 127};
		imshow("dst_init_3", dst_init_3);

		// 指向,修改 dst_init_3_temp, dst_init_3 也会改变
		Mat dst_init_3_temp = dst_init_3;
		dst_init_3_temp = Scalar{ 255, 0, 0 };
		imshow("dst_init_3_temp", dst_init_3_temp);

		// 指向,修改 dst_init_3_copy, dst_init_3 不会改变
		Mat dst_init_3_copy;
		dst_init_3.copyTo(dst_init_3_copy);
		dst_init_3_temp = Scalar{ 0, 255, 255 };
		imshow("dst_init_3_copy", dst_init_3_copy);
		waitKey(0);
	}
};

int main()
{
	Mat src = imread("data/right.bmp"); // 加载任意深度
	// 判断图片是否加载成功
	if (src.empty())
	{
		cout << "load image error !" << endl;
	}
	QuickDemo qd;
	qd.mat_creation_Demo(src);
}

你可能感兴趣的:(opencv,图像处理,opencv,计算机视觉,图像处理)