opencv Mat类型和BYTE*指针类型互转

本文详细介绍了如何在OpenCV中将Mat对象转换为BYTE*指针,以及如何反向操作。首先,通过计算图像的总字节数,利用Mat类的data成员变量进行内存拷贝实现Mat到BYTE*的转换。接着,介绍了BYTE*到Mat的转换过程,同样涉及字节计算,并使用memcpy函数完成数据拷贝。

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

1.Mat转BYTE*是利用Mat矩阵的什么机制,Mat类的哪个成员变量?

2. BYTE*转Mat利用的机制是一样的吗?

1.Mat转BYTE*函数

void MatToByte(Mat srcImg, BYTE*& pImg)
{
	int nFlag = srcImg.channels() * 8;//一个像素的bits
	int nHeight = srcImg.rows;
	int nWidth = srcImg.cols;
	
	int nBytes = nHeight * nWidth * nFlag / 8;//图像总的字节
	if(pImg)
		delete[] pImg;
	pImg = new BYTE[nBytes];//new的单位为字节
	memcpy(pImg, srcImg.data, nBytes);//转化函数,注意Mat的data成员	
}

2.BYTE*转Mat函数

bool ByteToMat(BYTE* pImg, int nH, int nW, int nFlag, Mat& outImg)//nH,nW为BYTE*类型图像的高和宽,nFlag为通道数
{
    if(pImg == nullptr)
    {
        return false;
    }
    int nByte = nH * nW * nFlag / 8;//字节计算
    int nType = nFlag == 8 ? CV_8UC1 : CV_8UC3;
    outImg = Mat::zeros(nH, nW, nType);
    memcpy(outImg.data, pImg, nByte);
    reture true;
}

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值