OpenCV: 同时打开两个摄像头

2025-10-19 20:18:48

1、硬件设施:双目摄像头

支持:一条usb接口的两个摄像头,和两条usb的两个摄像头。

OpenCV: 同时打开两个摄像头

2、双目摄像头的读取,有的用directshow来实现。

这里使用opencv直接进行双目摄像头的读取。

OpenCV: 同时打开两个摄像头

3、代码如下:

#include <opencv2/opencv.hpp>

#include<iostream>

using namespace cv;

using namespace std;

int main()

{

    //initialize and allocate memory to load the video stream from camera

    VideoCapture camera0(1);

    camera0.set(CV_CAP_PROP_FRAME_WIDTH,320);

    camera0.set(CV_CAP_PROP_FRAME_HEIGHT,240);

    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

        Mat3b frame0;

        camera0 >> frame0;

        Mat3b frame1;

        camera1 >> frame1;

        imshow("Video0", frame0);

        imshow("Video1", frame1);

//      std::cout << frame1.rows() << std::endl;

        //wait for 40 milliseconds

        int c = waitKey(40);

        //exit the loop if user press "Esc" key  (ASCII value of "Esc" is 27)

        if(27 == char(c)) break;

    }

    return 0;

}

4、注释:

分辨率为320*240,能够正常显示,分辨率太高,只有一个摄像头能正常显示,另一个显示灰度图。原因是USB的带宽有限。

摄像头的序号在opencv中是采用降序的形式,才能正确读取多个摄像头,否则就不能。

OpenCV: 同时打开两个摄像头

5、VideoCapture类有两种用法,一种是VideoCapture(const string& filename)用来打开视频文件,一种是VideoCapture(int device)用来打开设备。

6、isOpened函数用来检测VideoCapture类是否打开成功。

C++版本的OpenCV有一个明显的好处,就是不需要释放操作(不论是视频还是图片),VideoCapture类的析构函数会自动帮你完成。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢