首先是一些基礎的步驟,如創建MFC應用,添加按鈕等,博主主要參考了下面這篇文章,其中的前32步都是用OpenCV顯示圖片和視頻所必須的,即通用的。因爲LZ原來有配置OpenCV的基礎,因此配製仍是比較快的。這裏須要說明的是CvvImage.h和CvvImage.cpp文件在OpenCV2.2後就已經從OpenCV中移除了,可是咱們仍是有解決的辦法的,就是新建一個CvvImage.h和CvvImage.cpp文件,將網上找的代碼貼進去就好了,博主就搜了一個,固然大家也能夠直接從將CvvImage.h和CvvImage.cpp下載下來,加進目錄裏去。html
而後就是顯示視頻了,博主主要參考了下這篇文章,若是同窗們想仔細的搞清楚MFC的控件的原理和使用,如OnTimer()什麼的,博主推薦雞啄米的博客,博主看完以後感受獲益匪淺啊。函數
博主在上述的基礎上稍稍作了下改動,使顯示的視頻能自動調整大小以適應控件,代碼以下spa
1 void CFaceDetectionDlg::ResizeImage(IplImage* src_img,IplImage* resize_img, UINT ID) 2 { 3 4 // 讀取圖片的寬和高 5 int iw = src_img->width; 6 int ih = src_img->height; 7 8 CRect rect; 9 GetDlgItem(ID)->GetClientRect (&rect ); 10 int rw = rect.right - rect.left; // 求出圖片控件的寬和高 11 int rh = rect.bottom - rect.top; 12 13 float scale_w = iw/(float) rw; 14 float scale_h = ih/(float) rh; 15 16 // 找出寬和高中的較大值者 17 // 計算將圖片縮放到TheImage區域所需的比例因子 18 float scale = (scale_w > scale_h)? scale_w : scale_h; 19 20 // 縮放後圖片的寬和高 21 int nw = (int)( iw/scale ); 22 int nh = (int)( ih/scale ); 23 // 爲了將縮放後的圖片存入 TheImage 的正中部位,需計算圖片在 TheImage 左上角的指望座標值 24 int tlx = (scale_w > scale_h)? 0: (int)(rw-nw)/2; 25 int tly = (scale_w > scale_h)? (int)(rh-nh)/2: 0; 26 27 // 設置 TheImage 的 ROI 區域,用來存入圖片 img 28 cvZero(resize_img); 29 cvSetImageROI( resize_img, cvRect( tlx, tly, nw, nh) ); 30 // 對圖片 img 進行縮放,並存入到 TheImage 中 31 cvResize( src_img, resize_img ); 32 // 重置 TheImage 的 ROI 準備讀入下一幅圖片 33 cvResetImageROI( resize_img ); 34 }
以及顯示圖像的函數.net
1 void CFaceDetectionDlg::ShowImage( IplImage* img, UINT ID ) 2 { 3 //CDC* pDC = GetDlgItem( ID ) ->GetDC(); // 得到顯示控件的 DC 4 CDC *pDC = GetDlgItem(ID)->GetDC(); 5 HDC hDC = pDC ->GetSafeHdc(); // 獲取 HDC(設備句柄) 來進行繪圖操做 6 CRect rect; 7 GetDlgItem(ID) ->GetClientRect( &rect ); 8 int rw = rect.right - rect.left; // 求出圖片控件的寬和高 9 int rh = rect.bottom - rect.top; 10 int iw = img->width; // 讀取圖片的寬和高 11 int ih = img->height; 12 int tx = (int)(rw - iw)/2; // 使圖片的顯示位置正好在控件的正中 13 int ty = (int)(rh - ih)/2; 14 SetRect( rect, tx, ty, tx+iw, ty+ih ); 15 CvvImage cimg; 16 cimg.CopyOf( img ); // 複製圖片 17 cimg.DrawToHDC( hDC, &rect ); // 將圖片繪製到顯示控件的指定區域內 18 ReleaseDC( pDC ); 19 20 }
效果仍是很不錯的code