在mfc中要显示opencv的图形有以下办法:
1、Cvvimage 类里的函数 DrawPicToHDC( IplImage *img, UINT ID) 。现在opencv 3.0已经丢弃了这个类,需要自己去添加。
2、StretchDibBit的方法。有一个Mat 和位图列数对应问题。
3、能否将opencv的图形窗口嵌入图形控件呢?
在初始化函数中加入如下代码。
namedWindow("view", WINDOW_AUTOSIZE);
HWND hWnd = (HWND)cvGetWindowHandle("view");
HWND hParent = ::GetParent(hWnd);
::SetParent(hWnd, GetDlgItem(IDC_STATIC_MatToPic)->m_hWnd);
::ShowWindow(hParent, SW_HIDE);
下面就是在需要的地方 imshow("view", cvImgScaled);
图像大小与控件大小匹配,横列等比例缩放
DrawMatToPic(Mat cvImg, UINT ID)
{
CDC *pDC = GetDlgItem(ID)->GetDC();
HDC hDCDst = pDC->GetSafeHdc();
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
int NewWidth = cvImg.cols;
int NewHeight = cvImg.rows;
double XScale = double(rect.right) / double(cvImg.cols);
double YScale = double(rect.bottom) / double(cvImg.rows);
if (XScale > YScale)
{
NewWidth = cvImg.cols*YScale;
NewHeight = rect.bottom;
}
else if (XScale < YScale)
{
NewWidth = rect.right;
NewHeight = cvImg.rows*XScale;
}
cv::Size NewSize(NewWidth, NewHeight);
cv::Mat cvImgScaled(NewSize, CV_8UC3);
resize(cvImg, cvImgScaled, NewSize);
imshow("view", cvImgScaled);
}