1. 程式人生 > >OpenCV啟動攝像頭

OpenCV啟動攝像頭

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>

using namespace cv;


int main()
{
    VideoCapture cap(0);
    if(!cap.isOpened())
    {
        return -1;
    }
    Mat frame;
    Mat edges;

    bool stop = false;
    while
(!stop) { cap>>frame; cvtColor(frame, edges, CV_BGR2GRAY); GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); Canny(edges, edges, 0, 30, 3); imshow("當前視訊",edges); if(waitKey(30) >=0) stop = true; } return 0; }

對程式碼的幾點說明:
1. VideoCapture類

有兩種用法,一種是VideoCapture(const string& filename)用來開啟視訊檔案,一種是VideoCapture(int device)用來開啟裝置。
2. isOpened函式用來檢測VideoCapture類是否開啟成功。
3. C++版本的OpenCV有一個明顯的好處,就是不需要釋放操作(不論是視訊還是圖片),VideoCapture類的解構函式會自動幫你完成。

下面這段程式是開啟攝像頭並顯示攝像頭的。

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int main( int argc, char** argv ) { //宣告IplImage指標 IplImage* pFrame = NULL; //獲取攝像頭 CvCapture* pCapture = cvCreateCameraCapture(-1); //建立視窗 cvNamedWindow("video", 1); //顯示視屏 while(1) { pFrame=cvQueryFrame( pCapture ); if(!pFrame)break; cvShowImage("video",pFrame); char c=cvWaitKey(33);//讓每一幀暫停33ms if(c==27)break; //ESC,ASCⅡ碼27回車,ASCⅡ碼13換行(Ctrl + Enter),ASCⅡ碼10空格,ASCⅡ碼32 } cvReleaseCapture(&pCapture); cvDestroyWindow("video"); }

在Macbook pro 上,上面兩段程式碼我都可以跑通,都可以調取自帶的攝像頭。
攝像頭可以在系統資訊—>相機 檢視:

FaceTime 高清相機(內建):

  型號 ID:    UVC Camera VendorID_1452 ProductID_34057
  唯一 ID:    0x1a11000005ac8509

UVC,全稱為:USB video class 或USB video device class。是Microsoft與另外幾家裝置廠商聯合推出的為USB視訊捕獲裝置定義的協議標準,目前已成為USB org標準之一。因此就相當於呼叫USB攝像頭了。