uchar *pImg=(uchar *)CI.GetBits();//得到CImage数据区地址
ps=img.ptr
void MatToCImage( Mat &mat, CImage &cImage)
{
//create new CImage
int width = mat.cols;
int height = mat.rows;
int channels = mat.channels();
cImage.Destroy(); //clear
cImage.Create(width, height,\*channels ); //默认图像像素单通道占用1个字节
//copy values
uchar\* ps;
uchar\* pimg = (uchar\*)cImage.GetBits(); //A pointer to the bitmap buffer
int step = cImage.GetPitch();
for (int i = ; i < height; ++i)
{
ps = (mat.ptr<uchar>(i));
for ( int j = ; j < width; ++j )
{
if ( channels == ) //gray
{
\*(pimg + i\*step + j) = ps\[j\];
}
else if ( channels == ) //color
{
for (int k = ; k < ; ++k )
{
\*(pimg + i\*step + j\* + k ) = ps\[j\* + k\];
}
}
}
}
}
//cImage数据存到pbImage,后再转换为源灰度图pbSrc
iPitch=cImage.GetPitch();
iBytePerPixel=(cImage.GetBPP()+)/;
if(iBytePerPixel==)
{
for(y=;y<iHeight;y++)
{ //load的图像数据放到pbImage
pbImage=(PBYTE)(PBYTE(cImage.GetBits())+iPitch\*y);//得到的是图像初始像素地址
for(x=;x<iWidth;x++)
{
//pbImage转换为灰度图pbSrc
pbSrc\[y\*iWidth+x\]=(pbImage\[\*x\]\*0.15+pbImage\[\*x+\]\*0.55+pbImage\[\*x+\]\*0.3);
}
}
}
cImage.Destroy();
【转载自】
OpenCV中Mat对象转CImage - 挨踢生涯 - CSDN博客 https://blog.csdn.net/xianglifighter/article/details/38319903
手机扫一扫
移动阅读更方便
你可能感兴趣的文章