opencv读取并显示两个摄像头

环境:vs2010+opencv2.4.9

为了实现双目摄像头的读取,搜集了一些资料,有人说用directshow来实现,有人说直接可以用opencv读取多个摄像头。那么,既然opencv能实现,为什么还要装其他的库呢?现在就来介绍使用opencv读取并显示双目摄像头。另外我的双目摄像头仅仅只是两个合在一起的只有一条USB线的。

opencv读取并显示双目摄像头示例

直接上代码:

#include 
using namespace std;

int main()
{
    //initialize and allocate memory to load the video stream from camera 
    cv::VideoCapture camera0(1);
    camera0.set(CV_CAP_PROP_FRAME_WIDTH,320);
    camera0.set(CV_CAP_PROP_FRAME_HEIGHT,240);
    cv::VideoCapture camera1(0);
    camera1.set(CV_CAP_PROP_FRAME_WIDTH,320);
    camera1.set(CV_CAP_PROP_FRAME_HEIGHT,240);

    if( !camera0.isOpened() ) return 1;
    if( !camera1.isOpened() ) return 1;

    while(true) {
        //grab and retrieve each frames of the video sequentially 
        cv::Mat3b frame0;
        camera0 >> frame0;
        cv::Mat3b frame1;
        camera1 >> frame1;

        cv::imshow("Video0", frame0);
        cv::imshow("Video1", frame1);
//      std::cout << frame1.rows() << std::endl;
        //wait for 40 milliseconds
        int c = cvWaitKey(40);

        //exit the loop if user press "Esc" key  (ASCII value of "Esc" is 27) 
        if(27 == char(c)) break;
    }

    return 0;
}

输出图片如下:

opencv读取并显示两个摄像头_第1张图片

需要注意的是:
1、本来我的图是640*480的,但是单纯显示这种分辨率的图,只有video0能正常显示,而video1显示的灰色,根本没有imshow出任何信息。所以,我直接降低分辨率进行显示,原因是因为一条usb hub线的带宽有限。
2、摄像头的序号在opencv中是采用降序的形式,才能正确读取多个摄像头,否则就不能。
3、因为的环境是基于win7的,同时携带了360安全卫士,在运行此程序的时候关掉360卫士,否则只有video0能正常显示,而video1只显示灰色信息。

你可能感兴趣的:(计算机视觉)