源代码下载:下载Capture.zip-14.1KB前言这是一个用VisualC++窗口形式编写的简单视频采集应用程序。该项目演示了窗口应用程序的创建和OpenCV的VisualC++配置。OpenCV是免费的计算机视觉软件和用于图像处理的开源库。本文帮助程序员配置一个visualc++开发环境来运行基于窗口控件的OpenCV应用程序。OpenCV库可以集成到开发环境中。配置很容易,以下六个步骤展示了如何配置visualstudio2010。本文涉及一个使用VisualStudio2010版开发的视频捕获项目。ConfigureVisualC++PrepareVisualStudio2010第一步:在项目的属性管理器中选择“Debug|Win32”,右击它,然后选择属性,继续下一步。第2步:从C/C++类别中选择一个公共子类别。选择添加其他文件夹并添加以下路径。C:\opencv\build\include;对于64位:C:\opencv\build\x86\vc10\bin;对于32位:C:\opencv\build\x64\vc10\bin;第三步:如果系统是64位,选择库路径“C:\opencv\build\x86\vc10\lib”,否则选择库文件“C:\opencv\build\x64\vc10\lib”,然后单击确定按钮。第四步:这一步需要添加OpenCV库。它们位于“C:\opencv\build\x86\vc10\lib”中。对于Debug版:opencv_calib3d248d.libopencv_contrib248d.libopencv_core248d.libopencv_features2d248d.libopencv_flann248d.libopencv_gpu248d.libopencv_highgui248d.libopencv_imgproc248d.libopencv_legacy248d.libopencv_ml248d.libopencv_nonfree248d.libopencv_objdetect248d.libopencv_ocl248d.libopencv_photo248d.libopencv_stitching248d.libopencv_superres248d.libopencv_video248d.libopencv_videostab248d.lib发布准备删除文件名中的最后一个字母d。比如opencv_calib3d248d.lib到opencv_calib3d248.lib等。第5步:将公共语言运行时支持从纯MSIL公共语言运行时支持(/clr:pure)更改为公共语言运行时支持(/clr)。然后点击“确定”完成配置。第六步:添加如下环境地址:64位:C:\opencv\build\x86\vc10\bin;32位:C:\opencv\build\x64\vc10\bin;#p#Usingcode在开始写代码之前,需要包含头文件如下图。在头文件之后的命名空间之外,声明捕获和帧变量。这些变量是指针变量。#pragmaonce#include"opencv/cv.h"#include"opencv/highgui.h"#include"opencv2/opencv.hpp"#include"opencv2/core/core.hpp"CvCapture*捕获;IplImage*帧;cvCaptureFromCAM函数初始化第一个摄像机(索引0)的捕获。如果传入的索引为1,则初始化第二个摄像头,依此类推。捕获=cvCaptureFromCAM(0);进度条使用视频帧总数进行初始化。CV_CAP_PROP_FRAME_COUNT是传递给cvGetCaptureProperty的常量,用于获取视频的总帧数,而不是相机。trackBar1->最大值=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);从资源中释放捕获。cvReleaseCapture(&捕获);下面的函数可以从摄像头中采集视频,也可以从*.avi、*.mp4等视频文件中采集视频。private:System::Voidbutton2_Click(System::Object^sender,System::EventArgs^e){if(comboBox1->Text==“”){MessageBox::Show(this,"选择捕捉方法","错误!!!”);}if(button2->Text==“开始”){if(comboBox1->Text==“从相机捕捉”){注:捕获=cvCaptureFromCAM(0);trackBar1->最小=0;trackBar1->最大值=0;button2->Text=“停止”;timer1->开始();}elseif(comboBox1->Text=="CaptureFromFile"){ openFileDialog1->Filter=“AVI文件(*.avi)|*.txt|所有文件(*.*)|*.*”;openFileDialog1->FilterIndex=2;openFileDialog1->RestoreDirectory=true;openFileDialog1->FileName="";如果(openFileDialog1->ShowDialog()==System::Windows::Forms::DialogResult::OK){ char*fileName=(char*)Marshal::StringToHGlobalAnsi(openFileDialog1->FileName).ToPointer();capture=cvCaptureFromFile(文件名);trackBar1->最小=0;trackBar1->最大值=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);卜tton2->Text="停止";timer1->开始();}}}elseif(button2->Text=="Stop"){cvReleaseCapture(&capture);button2->Text=“开始”;timer1->停止(); }}cvQueryFrame函数查询当前视频捕获的帧数,赋值给帧变量frame=cvQueryFrame(capture);显示图像。pictureBox1->Image=gcnewSystem::Drawing::Bitmap(frame->width,frame->height,frame->widthStep,System::Drawing::Imaging::PixelFormat::Format24bppRgb,(System::IntPtr)frame->图像数据);图片框1->刷新();定时器初始化为30个时间间隔。此函数将在30个时间间隔后执行。下面的函数将查询帧并提取视频的属性。以下常量用于提取视频属性: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:获取视频帧率(每秒多少帧)。.private:System::Voidtimer1_Tick(System::Object^sender,System::EventArgs^e){try{frame=cvQueryFrame(capture);if(frame!=NULL){pictureBox1->Image=gcnewSystem::Drawing::Bitmap(frame->width,frame->height,frame->widthStep,System::绘图::成像::PixelFormat::Format24bppRgb,(System::IntPtr)frame->imageData);图片框1->刷新();trackBar1->Value=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES);双codec_double=cvGetCaptureProperty(捕获,CV_CAP_PROP_FOURCC); label6->Text=“编解码器:”+System::Text::Encoding::UTF8->GetString(BitConverter::GetBytes((int)codec_double));label7->Text="Time:"+(TimeSpan::FromMilliseconds(cvGetCaptureProperty(capture,CV_CAP_PROP_POS_MSEC)).ToString())->Substring(0,8);label8->Text=“帧编号:”+(int)cvGetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES);label9->文本=“Video分辨率:“+(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT)+X”+(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT);label11->文本=“视频帧率:”+(int)CV(GetCapture);}}catch(...){}}播放进度条初始化为当前视频帧位置(翻译或添加:,拖动进度时使用进度条的进度值设置当前视频帧位置酒吧)CV_CAP_PROP_POS_FRAMES是一个常量,用来获取视频帧的当前位置:学习如何配置visualc++的兴趣点。了解如何从视频文件中捕捉视频。了解如何提取视频属性。参考:[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英文原文:VideoCaptureusingOpenCVwithVC++翻译链接:http://www.oschina.net/translate/视频-capture-using-opencv-with-vcplusplus
