本文共 1090 字,大约阅读时间需要 3 分钟。
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