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;

         }
     }
   }

版权声明:本文为qq_46454669原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>