利用opencv捕獲usb網路攝影機並寫入視頻檔案

來源:互聯網
上載者:User

        對於搞視頻監控的朋友來說,視頻檔案的寫入,幾乎是必須的一個步驟。這裡,我給出一個視頻檔案寫入的例子。首先是利用opencv進行USB相機的視頻捕獲,然後,將視訊框架寫入到視頻檔案當中。在進行視頻檔案的寫入之前,有兩點需要提醒:

(1)opencv只是一個影像處理的工具庫,並不是視頻處理的工具庫!也就是說,它所處理的對象,應該是一張一張的圖片,而opencv本身雖然有一些API函數可以進行USB相機的讀取,但也僅僅是調用了windows 底層的vfw模組來實現,所以,如果你是windows vista,windows7之類的作業系統,很可能微軟已經拋棄了vfw模組。而這個時候,再利用opencv的相機視頻捕獲函數,就無法擷取視訊框架了。

(2)視頻檔案(.mpeg,.mp4,.rmvb,.avi等格式)的讀寫,需要專門的視頻轉碼器。很顯然,不同格式的視頻檔案,採用的視頻編碼技術是不相同的(值得提醒的是,.avi格式的視頻檔案,儘管尾碼是相同的,但內部採用的視頻編碼演算法仍可能不相同,具體可以參考這裡http://blog.csdn.net/carson2005/article/details/6314089),所以,進行視頻檔案讀寫之前,你需要按照相應的視頻轉碼器。而暴風,kmplayer之類的視頻播放器,其內部就已經包含了常用的視頻格式檔案的轉碼器。所以,你可以直接利用他們進行視頻檔案的播放。

 OK,瞭解了上面兩點,你就知道,在利用opencv進行視頻檔案寫入之前,必須要下載相應的視頻轉碼器。常用的有divx,xvid,ffmpeg等,筆者在這裡採用xvid(這裡有個簡單介紹:http://blog.csdn.net/carson2005/article/details/6553867)。

下面給出參考代碼:

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "iostream"
using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])
{
 CvCapture *cap = cvCreateCameraCapture(0);//初始化相機捕獲的指標
 if (!cap)
 {
  cout<<"create camera capture error..."<<endl;
  system("pause");
  exit(-1);
 }

 IplImage *tempImg = cvQueryFrame(cap);
 double fps = 20;
 CvSize size = cvSize(
  (int)cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_WIDTH),
  (int)cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_HEIGHT)
  );
 CvVideoWriter *writer = cvCreateVideoWriter("c:/test.avi", CV_FOURCC('X','V','I','D'), fps, size);

 IplImage *img = cvCreateImage(size, 8, 3);
 while((tempImg=cvQueryFrame(cap)) != NULL)
 {
  cvCopy(tempImg, img);
  if (img->origin == IPL_ORIGIN_TL)
  {
   cvFlip(img, img);
  }
  cvWriteFrame(writer, img);
 }
 
 cvReleaseImage(&img);
 cvReleaseCapture(&cap);
 cvReleaseVideoWriter(&writer);

 system("pause");
 return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.