opencv 打开双目摄像头只能采集一个摄像头的问题,及左右目图像分割成两幅图

一.opencv 打开双目摄像头只能采集一个摄像头的问题

本人采用单USB接口的双目摄像头,总是只打开左摄像头的图,经摸索后发现主要就是分辨率的问题,如果分辨率设置正确,便可以打开左右目合成图(在一张图上),如果设置不正确,可能报错,也可能只显示左目图像,所以解决如下

int main() {

 cv::VideoCapture cap(0);  //把path改为0,则读取摄像头
 cap.set(cv::CAP_PROP_FRAME_WIDTH,1440);   //设置分辨率
 cap.set(cv::CAP_PROP_FRAME_HEIGHT,480);   //设置分辨率

 cv::Mat img;
 while(1){

   cap.read(img);

   cv::imshow("image",img);

   cv::waitKey(1);
 }
 return 0;
}

二.左右目图像分割成两幅图

由于获得的是左右目合成图,所以需要分割开,具体做法如下

int main()
{
     while(1)
    {
     VideoCapture capture(0);
     if (!capture.isOpened())
     {
         cout<<"can not open the camera"<<endl; cin.get(); exit(1);
     }
     capture.set(CV_CAP_PROP_FRAME_WIDTH, WIDTH);
     capture.set(CV_CAP_PROP_FRAME_HEIGHT, HEIGHT);
     int count=0;

     Rect leftRect(0, 0, WIDTH/2, HEIGHT);   //创建一个Rect框,属于cv中的类,四个参数代表x,y,width,height
     Rect rightRect(WIDTH/2, 0, WIDTH/2, HEIGHT);
     while (1) {
         Mat frame; capture>>frame; //载入图像
         if (frame.empty())
         {
             //判断图像是否载入 cout<<"can not load the frame"<<endl;
         } 
        else {
             count++;
             if (count == 1) {
                 cout<<frame.cols<<" "<<frame.rows<<endl;
             }
             Mat leftImg,rightImg;
             frame(leftRect).copyTo(leftImg);
             frame(rightRect).copyTo(rightImg);
             imshow("left",leftImg);
             imshow("right",rightImg);
             //imshow("oriImage", frame);
             char c=waitKey(30); //延时30毫秒 if (c == 27) //按ESC键退出 break;

         }
     }
   }
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值