Mat转CImage
uchar *pImg=(uchar *)CI.GetBits();//得到CImage数据区地址
ps=img.ptr<uchar>(i);
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,8*channels ); //默认图像像素单通道占用1个字节 //copy values uchar* ps; uchar* pimg = (uchar*)cImage.GetBits(); //A pointer to the bitmap buffer int step = cImage.GetPitch(); for (int i = 0; i < height; ++i) { ps = (mat.ptr<uchar>(i)); for ( int j = 0; j < width; ++j ) { if ( channels == 1 ) //gray { *(pimg + i*step + j) = ps[j]; } else if ( channels == 3 ) //color { for (int k = 0 ; k < 3; ++k ) { *(pimg + i*step + j*3 + k ) = ps[j*3 + k]; } } } } }
//cImage数据存到pbImage,后再转换为源灰度图pbSrc iPitch=cImage.GetPitch(); iBytePerPixel=(cImage.GetBPP()+7)/8; if(iBytePerPixel==3) { for(y=0;y<iHeight;y++) { //load的图像数据放到pbImage pbImage=(PBYTE)(PBYTE(cImage.GetBits())+iPitch*y);//得到的是图像初始像素地址 for(x=0;x<iWidth;x++) { //pbImage转换为灰度图pbSrc pbSrc[y*iWidth+x]=(pbImage[3*x]*0.15+pbImage[3*x+1]*0.55+pbImage[3*x+2]*0.3); } } } cImage.Destroy();
【转载自】
OpenCV中Mat对象转CImage - 挨踢生涯 - CSDN博客 https://blog.csdn.net/xianglifighter/article/details/38319903
ζั͡ޓއ genji - 至此只为原地流浪.......