OpenCV啓動攝像頭

July 28, 2016
作者:dengshuai_super
出處:http://blog.csdn.net/dengshuai_super/article/details/52057828
聲明:轉載請註明作者及出處。


#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攝像頭了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章