Imshow直接显示图像到窗口控件 good!!

OpenCV的窗口添加到PictureControl里面,这样你可以继续使用OpenCV的setMouseCallback直接对PictureControl进行鼠标操作。
首先在你的 OnInit函数中添加如下
namedWindow("view", WINDOW_AUTOSIZE);
HWND hWnd = (HWND) cvGetWindowHandle("view");
HWND hParent = ::GetParent(hWnd);
::SetParent(hWnd, GetDlgItem(IDC_STATIC_CV)->m_hWnd);
::ShowWindow(hParent, SW_HIDE);
上面就是打开一个名为view的OpenCV窗口,并将其放置到一个ID为IDC_STATIC_CV的PictureControl里面,这个控件的类型需要是rectangle。当你在需要显示某图片的时候,就像在OpenCV里面显示一样就可以了。
imshow("view", mat);



void CMfcRibbonTemplateView : :OnInitialUpdate() { CFormView : :OnInitialUpdate(); GetParentFrame() - >RecalcLayout(); ResizeParentToFit(); //根据控件的大小设置初始帧的大小 CRect rect; GetDlgItem(IDC_PBSRC)  - >GetClientRect(  &rect );  // 获取控件尺寸位置 m_lframe  = Mat : :zeros(rect.Height(),rect.Width(),CV_8UC3); GetDlgItem(IDC_PBSRC)  - >GetClientRect(  &rect ); m_rframe  = Mat : :zeros(rect.Height(),rect.Width(),CV_8UC3); //绑定Mat到Picturebox上去 namedWindow( "src",WINDOW_AUTOSIZE); HWND hWnd  = (HWND)cvGetWindowHandle( "src"); HWND hParnt  =  : :GetParent(hWnd); : :SetParent(hWnd,GetDlgItem(IDC_PBSRC) - >m_hWnd); : :ShowWindow(hParnt,SW_HIDE); namedWindow( "dst",WINDOW_AUTOSIZE); hWnd  = (HWND)cvGetWindowHandle( "dst"); hParnt  =  : :GetParent(hWnd); : :SetParent(hWnd,GetDlgItem(IDC_PBDEST) - >m_hWnd); : :ShowWindow(hParnt,SW_HIDE); }
 
void CMfcRibbonTemplateView : :OnSize(UINT nType,  int cx,  int cy) { CFormView : :OnSize(nType, cx, cy); CWnd * pwndsrc  = GetDlgItem(IDC_PBSRC); CWnd * pwnddst  = GetDlgItem(IDC_PBDEST); //计算出长宽,这里的长宽是按照比例的,图像居中显示 int iblank  =  15//边界空余 int iwidth  = cx / 2 -iblank * 2; int iheight  =( int)(iwidth * 0. 75); if (pwndsrc - >GetSafeHwnd()  && pwnddst - >GetSafeHwnd()){ pwndsrc - >MoveWindow(iblank,(cy -iheight) * 0. 4,iwidth,iheight); pwnddst - >MoveWindow(cx / 2 +iblank,(cy -iheight) * 0. 4,iwidth,iheight); } }
 
void CMfcRibbonTemplateView : :showimage(Mat & src, UINT ID) { if (src.empty()) return; CRect rect; Mat dst  = src.clone(); GetDlgItem(ID)  - >GetClientRect(  &rect );  // 获取控件尺寸位置 if (dst.channels()  ==  1) cvtColor(dst, dst, CV_GRAY2BGR); resize(dst,dst,Size(rect.Width(),rect.Height())); imshow( "src",dst); }






你可能感兴趣的:(机器视觉,MFC,opencv,C++)