在c++下,图像以byte指针的方式存储,在opencv下,使用Mat存储和处理图像.
下面就是两者之间的数据转换.
输入pBuf指针,图像宽,高,位深, 返回Mat
void ByteToMat(byte* pBuf, long lWidth, long lHeight, int iImgBit, cv::Mat &sMat)
{
IplImage *IplSrcImg;
//分配opencv图像对象
if(iImgBit == 0) iImgBit = 8;
IplSrcImg = cvCreateImageHeader(cvSize(lWidth,lHeight), IPL_DEPTH_8U, iImgBit/8);
cvSetData(IplSrcImg, pBuf, (lWidth*iImgBit/8+3)/4*4);//拷贝图像数据给opencv图像对象
//cvNamedWindow("1");
//cvShowImage("1", IplSrcImg);waitKey();
sMat = cv::cvarrToMat(IplSrcImg, true);
cvReleaseImageHeader(&IplSrcImg);
}
输入Mat图像, 返回byte指针,图像宽,高,位深
void MatToByte(cv::Mat sMat, byte* pRBuf, long lWidth, long lHeight, int iImgBit )
{
lHeight = sMat.rows;
lWidth = sMat.cols;
iImgBit = sMat.channels() * 8;
std::memcpy(pRBuf,sMat.data, sMat.total() * sMat.elemSize());
}
以上是我边搜边