Opencv基础入门笔记03

Opencv入门基础笔记03:Mat对象的使用

Mat对象我们在学习图像处理的过程一直在接触,那么它到底是个什么东西呢?

Mat对象的起源:

当OpenCV 1.0发布时候没有Mat对象,是个C语言风格的数据结构IPlImage来表示内存中图像对象,但是OpenCV开发者在做复杂图像处理算法分析与计算时候,创建了很多IplImage这样的数据结构,偶尔最后可能忘记释放内存了,这样算法就有了内存泄漏,导致开发者浪费很多精力去寻找这个错误,这个已经跟图像处理算法没有关系了,但是它却困扰了很多OpenCV开发者。Intel发现自己做的库居然这么渣,广大群众不满意,决定从OpenCV 2.0开始使用一个新的内存对象Mat来表示内存中的图像对象。它是C++风格的数据结构自动实现内存分配与回收,这样OpenCV开发者就再也不用担心因为使用OpenCV的图像对象数据结构而导致内存泄漏问题了。是面向对象数据结构,分类与头部两个部分。

常用的简单构造Mat类方法
1.直接通过读取图片创造Mat类;
Mat img = imread("路径下图片");

2.利用create函数
Mat img; img.create(src.size(),src.type());
3.利用Scalar函数
Mat img; src.copyTo(img); img=Scalar(0,233,55);
4.利用自身的构造方法Mat img=Mat::zeros(src.size(),src.type());
Mat img=Mat::ones(src.size(),src.type());
Mat img=Mat::eye(src.size(),src.type());
5.利用clone函数
Mat img = src.clone();

Mat类的其他用法
1.创建数组矩阵(如上一节的矩阵掩模)
Mat kernel = (Mat_(3,3)<<0,0,0,1,1,1,0,0,0);
2.复制拷贝图片的头与指针
Mat B(A);不同于clone(),与copyTo()

代码演示

int main() {
	//方法1.读取图片
	Mat src_image = imread("E:\\360downloads\\hl.png");
	//2.判断图片是否读入
	if (!src_image.data) {
		printf("can't load image ,please checkout your path!");
		return 0;
	}
	imshow("src", src_image);
	
	//方法2
	Mat img2;
	img2.create(src_image.size(), src_image.type());
	imshow("2", img2);
	
	//方法3
	Mat img3;
	src_image.copyTo(img3);
	img3 = Scalar(0, 0, 44);
	imshow("3", img3);
	
	//方法4
	Mat img4= Mat::zeros(src_image.size(),src_image.type());
	imshow("4", img4);
	
	
	//Mat定义数组矩阵
	Mat kernel = (Mat_(4,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0,0,0,0);//3*3的卷积核
	imshow("kernel", kernel);
	

	

	waitKey(0);
	return 0;
}

Opencv基础入门笔记03_第1张图片还有一些方法未写,待更新。

你可能感兴趣的:(#,opencv基础笔记,算法,opencv,c++)