乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      OpenCV+MFC顯示圖像/視頻

       mscdj 2016-01-14

      OpenCV中文網站上有講怎么使用OpenCV讀入和顯示圖像和視頻

      圖像文件讀入和顯示:http://www./index.php/%E5%9B%BE%E5%83%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%85%A5%E5%92%8C%E6%98%BE%E7%A4%BA

      讀取視頻文件:http://www./index.php/%E8%AF%BB%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%E5%92%8C%E8%BF%90%E5%8A%A8%E7%89%A9%E4%BD%93%E6%A3%80%E6%B5%8B

      但它的顯示是使用的OpenCV庫里面的簡單的GUI,用來測試驗證可以,如果要做成可視化工程,還是得借助專門的GUI開發(fā)工具了。本文簡述使用MFC顯示圖像和視頻。

      1.讀取并顯示圖像

      顯示圖像或視頻使用VC中的Picture控件,用到VC圖形設備接口的設備上下文(CDC類)。比如打開顯示這樣一個圖片lean.jpg

      先進行一些初始化工作,代碼如下:

      復制代碼
       1 // DemoDlg.h
       2 #include <highgui.h>
       3 
       4 //在CDemoDlg類定義中加入如下幾行
       5 private:       
       6     CRect rect;
       7     CStatic* pStc; //標識圖像顯示的Picture控件
       8     CDC* pDC; //視頻顯示控件設備上下文
       9     HDC hDC; //視頻顯示控件設備句柄
      10     CvCapture* capture; //視頻獲取結構
      11 
      12 //DemoDlg.cpp
      13 #include <cv.h>
      14 #include <highgui.h>
      15 #include <cvaux.h>
      16 #include <ml.h>
      17 
      18 //在CDemoDlg構造函數(shù)內添加以下幾行,指針初始化
      19     pStc=NULL;
      20     pDC=NULL;
      21     capture=NULL;
      22 
      23 //在CDemoDlg類的OnInitDialog()中添加如下幾行,進行初始化
      24 BOOL CFaceDlg::OnInitDialog()
      25 {
      26     //框架生成代碼.......
      27 
      28     pStc=(CStatic *)GetDlgItem(IDC_VIEW);//IDC_VIEW為Picture控件ID
      29     pStc->GetClientRect(&rect);//將CWind類客戶區(qū)的坐標點傳給矩形
      30     pDC=pStc->GetDC(); //得到Picture控件設備上下文
      31     hDC=pDC->GetSafeHdc(); //得到控件設備上下文的句柄 
      32 
      33     return   TRUE;
      34 }
      復制代碼

      如上就將Picture控件的設備上下文句柄與圖片/視頻顯示的矩形區(qū)域聯(lián)系起來。

      下面顯示圖片,在對話框上添加一個打開按鈕,點擊該按鈕觸發(fā)讀取顯示圖像的事件,事件響應如下:

      復制代碼
      1 void CDemoDlg::OnOpen() 
      2 {
      3     IplImage * img=cvLoadImage("lena.jpg");//load image from file
      4     CvvImage cvvImg; //CvvImage類
      5 cvvImg.CopyOf(img);//復制圖像到當前的CvvImage對象中 6 cvvImg.DrawToHDC(hDC,&rect); //繪制圖像的ROI區(qū)域到DC的rect 7 }
      復制代碼

      2.讀取并顯示視頻

      因為視頻時一幀一幀的圖像,因此顯示視頻可以理解為間斷地讀取并顯示不同幀的圖像。這里有一個要點,為了合理利用資源,盡量不要使用一個死循環(huán)一直讀取視頻中的幀數(shù)據(jù),應該根據(jù)視頻的幀率設置合適的時鐘,定時地對視頻中的幀圖像進行讀取顯示。因為幀率通常很低,所以顯示的每一幀圖像看起來就會使連續(xù)的。

      對于視頻(視頻文件/攝像頭)的操作,OpenCV中文網站的參考手冊上給你詳細的用法,詳見http://www./index.php/HighGUI%E8%A7%86%E9%A2%91%E8%AF%BB%E5%86%99%E5%87%BD%E6%95%B0

      這里給出視頻文件的讀取與現(xiàn)實(因為沒攝像頭,攝像頭的還沒有測試)。

      初始化工作同上面的圖像讀取顯示一樣,所不同的是CDemoDlg::OnOpen()事件響應函數(shù)中的代碼有區(qū)別,如下

      復制代碼
       1 void CDemoDlg::OnOpen()
       2 {
       3     if (!capture)
       4     {        
       5         capture=cvCaptureFromAVI("D://OtherUse//11.avi"); //初始化一個視頻文件捕捉器
       6     }
       7     if(!capture)
       8     {
       9         AfxMessageBox("無法獲得攝像頭");
      return; 10 } 11 SetTimer(1,25,NULL); //定時器,定時時間和幀率一致 12 }
      復制代碼

      然后設置時間響應,定時到達后,處理OnTimer(UINT nIDEvent)事件,視頻顯示在這里面完成。

      復制代碼
       1 void CDemoDlg::OnTimer(UINT nIDEvent) 
       2 {
       3     // TODO: Add your message handler code here and/or call default
       4     if(1==nIDEvent)
       5     {
       6         IplImage* img=0;  
       7         img=cvQueryFrame(capture); //從攝像頭或者文件中抓取并返回一幀
       8         //cvGrabFrame( capture ); //從攝像頭或者視頻文件中抓取幀
       9         //img=cvRetrieveFrame(capture); //取回由函數(shù)cvGrabFrame抓取的圖像
      10         CvvImage m_CvvImage;  
      11         m_CvvImage.CopyOf(img,1); //復制該幀圖像    
      12         m_CvvImage.DrawToHDC(hDC, &rect); //顯示到設備的矩形框內
      13     }
      14     CDialog::OnTimer(nIDEvent);
      復制代碼

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多