Mat对象的使用及注意事项

本文介绍了OpenCV中的Mat对象,包括其作为图像内存管理的优势、头部与数据部分的区别、复制方式(完全复制与部分复制)以及在使用过程中需要注意的事项。Mat对象在创建时可以指定尺寸、通道数及初始化像素值。在处理图像时,理解Mat对象的特性对于避免内存泄漏和提高效率至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,什么是Mat对象 ,见下图


Mat对象封装了图像在内存中的信息,用于表示一副加载到内存中的图像,是opencv2.0以后引入的

相比之前的IpImage对象,具有自动分配内存,不存在内存泄漏的优点,Mat对象分为头部与数据部分。

2,Mat对象的使用

因为Mat对象分为头部和数据两部分,所以当复制mat对象时有两种情况


1,完全复制:就是把Mat对象的头部和数据部分完全复制  可以通过 clone()和copyTo两个API实现

比如Mat dst=src.clone() 或者  src.copyTo(dst)

2,部分复制:只复制Mat对象的头和指针部分,不复制数据

比如 Mat src=imread("path"),Mat dst(src) 


3,注意事项

1,Mat对象输出图像的内存是自动分配的,无需考虑内存分配问题

2,赋值操作和拷贝构造函数只会复制头部

3,完全复制只能通过clone和copyTo实现


4,Mat对象的创建

Mat M(2,2,CV_8UC3,Scalar(0,0,255))

前两个参数分别表示行(row)跟列(column)也就是图像的宽,高,CV_8UC3中的8表示每个通道占8位

U表示无符号,C表示Char类型,3表示图像的通道是数目是3,Scalar(0,0,255)用于初始化每个像素通道的值

这是个向量,向量的维度和图像的通道数目保持一致。


演示代码


#include <opencv2\opencv.hpp>
#include <highgui.h>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
	Mat src;
	src = imread("test.jpg");
	if (src.empty())
	{
		printf("图像加载错误!");
		return -1;
	}
	//创建显示窗口
	namedWindow("input",CV_WINDOW_AUTOSIZE);
	//imshow("input",src);

	//Mat dst;
	//dst = Mat(src.size(),src.type());
	//dst = Scalar(127,0,255);//初始化每个像素BGR通道的值
	//namedWindow("output-1", CV_WINDOW_AUTOSIZE);
	//imshow("output-1",dst);

	Mat dst;
	//src.copyTo(dst);
	//namedWindow("output-2", CV_WINDOW_AUTOSIZE);
	//imshow("output-2",dst);
	cvtColor(src,dst,CV_BGR2GRAY);
	printf("input image channel:%d\n", src.channels());
	printf("output image channel:%d\n",dst.channels());

	int cols = dst.cols;
	int rows = dst.rows;
	//输出图像的宽,高
	printf("rows:%d cols:%d",rows,cols);

	//获取第0行第一个像素的值
	const uchar* firstRow = dst.ptr<uchar>(0);
	printf("first pixel value:%d\n",*firstRow);

	Mat M(10,10,CV_8UC1,Scalar(127));
	cout << "M=" << endl << M << endl;
	waitKey(0);
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值