在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);
}