opencv读取并显示两个摄像头

环境:vs2010+opencv2.4.9

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

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

直接上代码:

#include <opencv2/opencv.hpp>
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;
}

输出图片如下:

这里写图片描述

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

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 35
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值