MFC显示图像到界面,可以用链接中的DrawMatToPic,有时会出现IplImage*类型转换问题,因为用opencv做后续图像处理,所以统一使用Mat类型,可以showMat()函数进行显示。在MFC中嵌入opencv窗口”view”后,其他地方调用imshow(”view“,图像名)。
int Ctest2Dlg::ShowMat(cv::Mat img, HWND hWndDisplay)
{
if (img.channels()<3)`
{
return -1;
}
//构造将要显示的Mat版本图片
RECT rect;
::GetClientRect(hWndDisplay, &rect);
cv::Mat imgShow(abs(rect.top - rect.bottom), abs(rect.right - rect.left), CV_8UC3);
resize(img, imgShow, imgShow.size());
//在控件上显示要用到的CImage类图片
ATL::CImage CI;
int w = imgShow.cols;//宽
int h = imgShow.rows;//高
int channels = imgShow.channels();//通道数
CI.Create(w, h, 8 * channels);
//CI像素的复制
uchar *pS;
uchar *pImg = (uchar *)CI.GetBits();//得到CImage数据区地址
int step = CI.GetPitch();
for (int i = 0; i<h; i++)
{
pS = imgShow.ptr<uchar>(i);
for (int j = 0; j<w; j++)
{
for (int k = 0; k<3; k++)
*(pImg + i*step + j * 3 + k) = pS[j * 3 + k];
//注意到这里的step不用乘以3
}
}
// TODO: 在此添加额外的初始化代码
//在控件显示图片
HDC dc;
dc = ::GetDC(hWndDisplay);
CI.Draw(dc, 0, 0);
::ReleaseDC(hWndDisplay, dc);
CI.Destroy();
return 0;
}
---------------------
原文:https://blog.csdn.net/qq_36509928/article/details/82141970