1.Mat转unsigned char*函数
void MatToData(Mat srcImg, void*& data)
{
int nFlag = srcImg.channels() * 8;//一个像素的bits
int nHeight = srcImg.rows;
int nWidth = srcImg.cols;
int nBytes = nHeight * nWidth * nFlag / 8;//图像总的字节
if (data)
delete[] data;
data = new unsigned char[nBytes];//new的单位为字节
memcpy(data, srcImg.data, nBytes);//转化函数,注意Mat的data成员
}
2.unsigned char*转Mat函数
bool DataToMat(void* data, int nH, int nW, int nFlag, Mat& outImg)//nH,nW为BYTE*类型图像的高和宽,nFlag为通道数
{
if (data == 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, (unsigned char*)data, nByte);
return true;
}
最后
如果觉得文章对您有帮助的话,别忘了给我个赞,谢谢!