// 实现cv::Mat 结构到 CImage结构的转化void MatToCImage(cv::Mat& mat, CImage& cImage)
{
int width = mat.cols;
int height = mat.rows;
int channels = mat.channels();
if (width <= 0)
{
return;
}
if (!cImage.IsNull())
{
cImage.Destroy();//这一步是防止重复利用造成内存问题
}
if (!cImage.Create(width, height, 8 * channels))
{
return;
}
uchar* ps;
uchar* pimg = (uchar*)cImage.GetBits(); //获取CImage的像素存贮区的指针
int step = cImage.GetPitch();//每行的字节数,注意这个返回值有正有负
// 如果是1个通道的图像(灰度图像) DIB格式才需要对调色板设置
// CImage中内置了调色板,我们要对他进行赋值:
if (1 == channels)
{
RGBQUAD* ColorTable;
int MaxColors = 256;
//这里可以通过CI.GetMaxColorTableEntries()得到大小(如果你是CI.Load读入图像的话)
ColorTable = new RGBQUAD[MaxColors];
cImage.GetColorTable(0, MaxColors, ColorTable);//这里是取得指针
for (int i = 0; i<MaxColors; i++)
{
ColorTable[i].rgbBlue = (BYTE)i;
//BYTE和uchar一回事,但MFC中都用它
ColorTable[i].rgbGreen = (BYTE)i;
cv::Mat类型转为CImage,MFC传入窗口句柄显示CImage图片
最新推荐文章于 2025-06-19 13:25:32 发布