1012327963 发表于 2021-6-28 10:54:23

Opencv问题


我买了一个opencv的双目摄像头 同时启动,可是运行以后我的笔记本摄像头一直在闪烁,无法启动双目摄像头
#if 1//运行前改成1
#include<opencv2/opencv.hpp>
#include<stdlib.h>
#include <opencv2/highgui/highgui_c.h>
using namespace cv;
using namespace std;

int main()
{
    Mat frame1, frame2;
    VideoCapture cap1, cap2;

    int cont = 0;
    while (frame1.rows < 2)
    {
      cap1.open(700);
      cap1.set(CAP_PROP_FOURCC, 'GPJM');
      cap1.set(CAP_PROP_FRAME_WIDTH, 320);
      cap1.set(CAP_PROP_FRAME_HEIGHT, 240);
      cont = 0;
      while (frame1.rows < 2 && cont < 5)
      {
            cap1 >> frame1;
            cont++;
      }
    }
    while (frame2.rows < 2)
    {
      cap2.open(701);
      cap2.set(CAP_PROP_FOURCC, 'GPJM');
      cap2.set(CAP_PROP_FRAME_WIDTH, 320);
      cap2.set(CAP_PROP_FRAME_HEIGHT, 240);
      cont = 0;
      while (frame2.rows < 2 && cont < 5)
      {
            cap2 >> frame2;
            cont++;
      }
    }
    while (true)
    {
      cap1 >> frame1;
      cap2 >> frame2;

            cap1.open(1); //打开摄像头
            cap2.open(1); //打开摄像头
    //cap.open("rtsp://root:000000@169.254.246.218/axis-media/media.amp");
    if (!cap1.isOpened()&& !cap2.isOpened())//如果视频不能正常打开则返回
      return 0;
      cvWaitKey(30);
      
      imshow("cap1", frame1);
      imshow("cap2", frame2);

    }
    return 0;
}


#endif


附上能启动一个的代码
//#if 1//运行前改成1
//#include<opencv2/opencv.hpp>
//#include<stdlib.h>
//#include <opencv2/highgui/highgui_c.h>
//using namespace cv;
//using namespace std;
//
//int main()
//{
//    VideoCapture cap;
//    cap.open(1); //打开摄像头
//    //cap.open("rtsp://root:000000@169.254.246.218/axis-media/media.amp");
//    if (!cap.isOpened())//如果视频不能正常打开则返回
//      return 0;
//    cvWaitKey(30);
//    Mat frame;//用于保存每一帧图像
//    cap >> frame;
//
//    imshow("hello world", frame);
//    cvWaitKey(300);
//    //system("C:\"Program Files (x86)"\"CHUSEI 3D Webcam"\"CHUSEI 3D Webcam.exe"");
//
//    char buf = { 0 }; //保存路径变量
//
//    while (1)
//    {
//      cap >> frame;          //等价于cap.read(frame);
//      if (frame.empty())   //如果某帧为空则退出循环
//            break;
//
//      imshow("【双目原始视图】", frame);    //显示双目原始图像原始分辨率为 640*480
//
//      Mat DoubleImage;
//
//      resize(frame, DoubleImage, Size(640, 240), (0, 0), (0, 0), INTER_AREA);   // 纵向分辨率缩小一半
//      imshow("【双目缩小视图】", DoubleImage);//显示图像
//
//
//      Mat        LeftImage = DoubleImage(Rect(0, 0, 320, 240));      //分割得到左视图
//      Mat RightImage = DoubleImage(Rect(320, 0, 320, 240));   //分割得到右视图
//
//      imshow("【左视图】", LeftImage);         //显示左视图
//      imshow("【右视图】", RightImage);      //显示右视图
//
//      char c = cvWaitKey(30);
//      if (c == 27)//Esc键退出
//      {
//            break;
//      }
//
//      line(frame, cvPoint(200, 250), cvPoint(100, 400), cvScalar(255, 255, 0), 2);
//      line(frame, cvPoint(400, 250), cvPoint(500, 400), cvScalar(255, 255, 0), 2);
//      imshow("hello world", frame);    //显示双目原始图像原始分辨率为 640*480
//      waitKey(1);
//      Mat dst;
//      cvtColor(frame, dst, COLOR_BGR2GRAY);
//      GaussianBlur(dst, dst, Size(7, 7), 1.5, 1.5);
//      Canny(dst, dst, 0, 30, 3);//边缘检测
//      imshow("读取视频", dst);
//      waitKey(1);//延时1ms
//    }
//    cap.release();//释放资源
//}
//
//
//#endif

qiuyouzhi 发表于 2021-6-28 19:19:57

是不是这里的问题?
if (!cap1.isOpened()&& !cap2.isOpened())//如果视频不能正常打开则返回
      return 0;
      cvWaitKey(30);
      
      imshow("cap1", frame1);
      imshow("cap2", frame2);

    }
都return 0 了,后面咋还有代码呢

1012327963 发表于 2021-6-28 19:49:26

qiuyouzhi 发表于 2021-6-28 19:19
是不是这里的问题?

都return 0 了,后面咋还有代码呢

我下午重新写了一个就是发现一个超出长宽的范围导致读取不正常,但还是想知道这个为什么会唤出电脑摄像头而不是自带的双目摄像头
页: [1]
查看完整版本: Opencv问题