日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C++程序使用OpenCV實現(xiàn)視頻捕獲(附源碼)

源碼下載:下載 Capture.zip - 14.1 KB

創(chuàng)新互聯(lián)公司一直在為企業(yè)提供服務(wù),多年的磨煉,使我們在創(chuàng)意設(shè)計,全網(wǎng)整合營銷推廣到技術(shù)研發(fā)擁有了開發(fā)經(jīng)驗。我們擅長傾聽企業(yè)需求,挖掘用戶對產(chǎn)品需求服務(wù)價值,為企業(yè)制作有用的創(chuàng)意設(shè)計體驗。核心團隊擁有超過10年以上行業(yè)經(jīng)驗,涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)四川服務(wù)器托管成都app軟件開發(fā)公司、手機移動建站、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)整合營銷。

前言

這是一個使用 Visual C++ 窗口表單編寫的簡單視頻捕捉應(yīng)用程序。這個工程既演示了窗口表單應(yīng)用程序的創(chuàng)建,又演示了 OpenCV 的 Visual C++ 配置。

OpenCV 是免費的計算機視覺軟件,也是圖像處理的開源庫。本文幫助程序員配置 visual c++ 開發(fā)環(huán)境,從而運行基于窗口控制的 OpenCV 應(yīng)用程序。

OpenCV 庫可以集成到開發(fā)環(huán)境中。它易于配置,如下六步展示了怎樣來配置 visual studio 2010。

這篇文章涉及一個視頻捕捉工程,它由  Visual Studio 2010 版本開發(fā)而成。

配置Visual C++

準備Visual Studio 2010

步驟1:

在項目的屬性管理器中選擇“Debug|Win32”,右鍵點擊它,然后選擇屬性并繼續(xù)下一步。

步驟2:

從C/C++范疇中選擇通用的子范疇。選擇添加額外的文件夾,添加下面的路徑。

C:\opencv\build\include;

對于64位:

C:\opencv\build\x86\vc10\bin;

對于32位:

C:\opencv\build\x64\vc10\bin;

步驟3:

如果系統(tǒng)是64位的,選擇庫路徑“C:\opencv\build\x86\vc10\lib”,否則選擇庫文件“C:\opencv\build\x64\vc10\lib”,然后點擊Ok按鈕。

步驟4:

在這一步中,需要添加OpenCV庫。它們位于“C:\opencv\build\x86\vc10\lib”。

對于Debug版:

opencv_calib3d248d.lib opencv_contrib248d.lib opencv_core248d.lib
opencv_features2d248d.lib

opencv_flann248d.lib

opencv_gpu248d.lib
opencv_highgui248d.lib opencv_imgproc248d.lib opencv_legacy248d.lib
opencv_ml248d.lib opencv_nonfree248d.lib opencv_objdetect248d.lib
opencv_ocl248d.lib opencv_photo248d.lib opencv_stitching248d.lib
opencv_superres248d.lib opencv_video248d.lib opencv_videostab248d.lib

發(fā)布準備

在文件名中刪除最后的字母  d。如 opencv_calib3d248d.lib 到 opencv_calib3d248.lib 等等。

步驟5:

變換通用語言運行支持,從純MSIL通用語言運行支持(/clr:pure)換為通用語言運行支持(/clr)。然后點擊“ok”完成配置。

步驟6:

添加下列環(huán)境地址:

64位:C:\opencv\build\x86\vc10\bin;

32位:C:\opencv\build\x64\vc10\bin;

#p#

使用代碼

在開始寫代碼之前,需要如下所示一樣包含頭文件。在頭文件之后的命名空間外,聲明capture和frame變量。這些變量是指針變量。

 
 
  1. #pragma once
  2. #include "opencv/cv.h"
  3. #include "opencv/highgui.h"
  4. #include "opencv2/opencv.hpp"
  5. #include "opencv2/core/core.hpp"
  6. CvCapture* capture;
  7. IplImage* frame;

cvCaptureFromCAM函數(shù)初始化第一個攝像頭的采集(索引為0)。如果索引傳入的為1,那么它初始化的是第二個攝像頭,以此類推。

 
 
  1. capture = cvCaptureFromCAM(0);

進度條以視頻總幀數(shù)來初始化。CV_CAP_PROP_FRAME_COUNT是傳遞給cvGetCaptureProperty的一個常量,來得到視頻的總幀數(shù),而不是攝像頭的。

 
 
  1. trackBar1->Maximum = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);

從資源中釋放采集。

 
 
  1. cvReleaseCapture(&capture);

下面的函數(shù)從攝像頭中采集視頻,也可以從像*.avi,*.mp4的視頻文件中采集視頻。

 
 
  1. private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
  2. {
  3.    if(comboBox1->Text == "")
  4.    {
  5.     MessageBox::Show(this,"Select Capture Method","Error!!!");
  6.    }
  7.    if(button2->Text == "Start")
  8.    {
  9.     if (comboBox1->Text == "Capture From Camera")
  10.     {                    
  11.         capture = cvCaptureFromCAM(0);
  12.         trackBar1->Minimum = 0;
  13.         trackBar1->Maximum = 0;
  14.         button2->Text = "Stop";
  15.         timer1->Start();
  16.     }
  17.     else if (comboBox1->Text == "Capture From File")
  18.     {    
  19.         openFileDialog1->Filter = "AVI files (*.avi)|*.txt|All files (*.*)|*.*";
  20.         openFileDialog1->FilterIndex = 2;
  21.         openFileDialog1->RestoreDirectory = true;
  22.         openFileDialog1->FileName ="";
  23.         if ( openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK )
  24.         {        
  25.          char *fileName = (char*) Marshal::StringToHGlobalAnsi(openFileDialog1->FileName).ToPointer();                    
  26.          capture = cvCaptureFromFile(fileName);
  27.          trackBar1->Minimum = 0;
  28.          trackBar1->Maximum = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);
  29.          button2->Text = "Stop";
  30.          timer1->Start();
  31.        }                
  32.     }
  33.    }
  34.    else if(button2->Text == "Stop")
  35.    {
  36.      cvReleaseCapture(&capture);        
  37.      button2->Text = "Start";
  38.      timer1->Stop();
  39.    }
  40. }

cvQueryFrame函數(shù)查詢當前視頻采集的幀數(shù),分配給frame變量。

 
 
  1. frame = cvQueryFrame(capture);

下面的聲明是OpenCV中imshow("windowname",frame)函數(shù)的一個替換,用來顯示圖像。

 
 
  1. pictureBox1->Image  = gcnew System::Drawing::Bitmap(frame->width,frame->height,frame->widthStep,System::Drawing::Imaging::PixelFormat::Format24bppRgb,(System::IntPtr) frame->imageData);
  2. pictureBox1->Refresh();

定時器初始化為30個時間間隔。30個時間間隔之后將執(zhí)行此函數(shù)。下面的函數(shù)將查詢幀,并提取出視頻的屬性。以下常量用于提取視頻屬性:

CV_CAP_PROP_POS_FRAMES : 獲得視頻當前幀位置。

CV_CAP_PROP_FOURCC : 獲得視頻信息。

CV_CAP_PROP_POS_MSEC : 獲得時間信息。

CV_CAP_PROP_FRAME_HEIGHT : 獲得視頻幀高。

CV_CAP_PROP_FRAME_WIDTH : 獲得視頻幀寬。

CV_CAP_PROP_FPS : 獲得視頻幀率(每秒多少幀)。.

 
 
  1. private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) 
  2. {
  3.     try
  4.     {        
  5.         frame = cvQueryFrame(capture);    
  6.         if(frame != NULL)
  7.         {
  8.             pictureBox1->Image  = gcnew System::Drawing::Bitmap(frame->width,frame->height,frame->widthStep,System::Drawing::Imaging::PixelFormat::Format24bppRgb,(System::IntPtr) frame->imageData);
  9.             pictureBox1->Refresh();
  10.     
  11.             trackBar1->Value = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES);            
  12.             double codec_double = cvGetCaptureProperty(capture,CV_CAP_PROP_FOURCC);
  13.             label6->Text = "Codec: " + System::Text::Encoding::UTF8->GetString(BitConverter::GetBytes((int)codec_double));
  14.             label7->Text = "Time: " + (TimeSpan::FromMilliseconds( cvGetCaptureProperty(capture,CV_CAP_PROP_POS_MSEC) ).ToString())->Substring(0, 8);
  15.             label8->Text = "Frame No.: " + (int)cvGetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES);
  16.             label9->Text = "Video Resolution: " + (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT) + " X " + (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH);
  17.             label11->Text = "Video Frame Rate: " + (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);
  18.         }
  19.     }catch(...){}
  20. }

播放進度條初始化以當前視頻幀位置(譯者加:,并在拖動進度條時用進度條的進度值設(shè)置當前視頻幀位置)。CV_CAP_PROP_POS_FRAMES 是一個用來得到視頻幀當前位置的常量:

 
 
  1. private: System::Void trackBar1_Scroll(System::Object^  sender, System::EventArgs^  e) 
  2. {
  3.     cvSetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES, trackBar1->Value);
  4. }

興趣點

學(xué)習(xí)如何配置 visual c++。

學(xué)習(xí)如何從視頻文件中捕獲視頻。

學(xué)習(xí)如何提取視頻屬性。

參考:

[1] http://opencv.org/

[2] http://en.wikipedia.org/wiki/OpenCV

[3] http://docs.opencv.org/

[4] http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html

英文原文:Video Capture using OpenCV with VC++

譯文鏈接:http://www.oschina.net/translate/video-capture-using-opencv-with-vcplusplus


分享題目:C++程序使用OpenCV實現(xiàn)視頻捕獲(附源碼)
網(wǎng)頁地址:http://www.dlmjj.cn/article/dpdjjhc.html