在mfc的圖形控件嵌入opencv的圖形窗口

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章