天天看点

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();
    if(!cap.isOpened())
    {
        return -;
    }
    Mat frame;
    Mat edges;

    bool stop = false;
    while(!stop)
    {
        cap>>frame;
        cvtColor(frame, edges, CV_BGR2GRAY);
        GaussianBlur(edges, edges, Size(,), , );
        Canny(edges, edges, , , );
        imshow("当前视频",edges);
        if(waitKey() >=)
            stop = true;
    }
    return ;
}
           

对代码的几点说明:

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(-);

    //创建窗口
    cvNamedWindow("video", );

    //显示视屏
    while()
    {
        pFrame=cvQueryFrame( pCapture );
        if(!pFrame)break;
        cvShowImage("video",pFrame);
        char c=cvWaitKey();//让每一帧暂停33ms
        if(c==)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摄像头了。