Mat转CImage
阅读原文时间:2023年07月15日阅读:2

uchar *pImg=(uchar *)CI.GetBits();//得到CImage数据区地址

ps=img.ptr(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,\*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