mat学习

创建mat矩阵

	/*创建矩阵
		3000行
		4000列
		CV_8UC3:数据类型
			CV_:OpenCV中定义数据类型的前缀
			8U表示8位无符号整数
			C3表示有3个通道
	*/
	Mat mat(3000, 4000, CV_8UC3);
	/*
	清理原有空间并创建
	*/
	mat.create(200, 100, CV_8UC1);

获取mat的形状尺寸

	/*
	mat.row行数
	mat.cols列数
	mat.elemSize()通道数
	*/
	cout << mat.rows << " " << mat.cols << " " << mat.elemSize();
	/*

释放空间

	release或者析构:引用计数为1时才会释放(所有引用都释放了)

判断存储空间是否连续

isContinuous
判断存储空间是否连续
通过step记录

遍历

遍历连续存储的图片中的像素

int size = mat.rows*mat.cols*mat.elemSize();
		for (int i = 0; i < size; i += 3) {
			cout<<mat.data[i]<<" "<< mat.data[i+1]<<" "<< mat.data[i+2];
		}

遍历不连续存储的矩阵

	for (int row = 0; row < mat.rows; row++)
	{
		for (int col = 0; col < mat.cols; col++)
		{
			(&mat.data[row*mat.step])[col*es] = 0;
			(&mat.data[row*mat.step])[col*es + 1] = 0;
			(&mat.data[row*mat.step])[col*es + 2] = 0;
		}

	}

通过ptr接口遍历Mat,性能基本等同于有地址访问(模板函数)

	for (int row = 0; row < mat.rows; row++){
		for (int col = 0; col < mat.cols; col++)
		{
			Vec3b *c = mat.ptr<Vec3b>(row, col); //返回一个指针
			c->val[0] = 255;
			c->val[1] = 255;
			c->val[2] = 255;
		}
	}

通过at接口遍历Mat

for (int row = 0; row < mat.rows; row++) {
			for (int col = 0; col < mat.cols; col++)
			{
				Vec3b &m = mat.at<Vec3b>(row, col);  //返回引用类型
				m[0] = 255;
				m[1] = 255;
				m[2] = 255;
			}
		}

迭代器遍历mat

auto it = mat.begin<Vec3b>();
	auto it_end = mat.end<Vec3b>();

	for (; it != it_end; it++) {
		(*it).val[0] = 0;
		(*it).val[2] = 0;
		(*it).val[1] = 0;
	}

读取、显示、保存图片

IMREAD_COLOR—以BGR格式读取图片

Mat img = imread("E:\\123.png",IMREAD_COLOR);

判断是否读取成功,并显示图片

if (img.data == NULL) {   // 也可用if(img.empty())
		cout << "读取失败";
	}
	else{
		//克隆
		Mat img2 = img.clone();
		// 保存文件,如果保存成功,返回true,否则返回false
		bool ret = imwrite("E:\\1234.png", img);


		// 显示图片
		namedWindow("显示图片");  //z创建窗口
		imshow("显示图片",img);//将图片显示在窗口上

	}
	waitKey(3000); // 显示3秒
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值