尝试使用Qt和OpenCV从高清网络摄像头获取1080p实时信息仅获得480p

时间:2014-07-31 12:46:38

标签: c++ linux qt opencv webcam

我正在尝试使用Qt和OpenCV进行全高清处理,此刻我只能得到480p,你可以在代码中看到我有帧的宽度和高度。我也试过设置使用cvSize(1920 x 1080)的大小,但它并没有改变分辨率。

非常感谢您的帮助!

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);

  VideoCapture cap(1); //capture webcam

  if (!cap.isOpened()) //if not successful then exit
  {
    qDebug() << "Cannot open webcam";
    return -1;
  }

  namedWindow("Camera feed", CV_WINDOW_AUTOSIZE); //create window

  double dWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH); //get width of frames of video
  double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //get height of frames of video
  Size frameSize(static_cast<int>(dWidth), static_cast<int>(dHeight));

  qDebug() << "Frame size = " << dWidth << "x" << dHeight << endl;

  VideoWriter oVideoWriter("video.avi", CV_FOURCC('M','P','E','G'), 20, frameSize);

  if(!oVideoWriter.isOpened())
  {
    qDebug() << "ERROR: Failed to write the video" << endl;
    return -1;
  }
  while(1)
  {
    Mat frame;
    bool bSuccess = cap.read(frame); //read a new frame from video

    if(!bSuccess) //if unsuccessful, break loop
    {
        qDebug() << "Cannot read frame from video file" << endl;
        break;
    }

    oVideoWriter.write(frame); //write the frame into the file
    imshow("Camera feed", frame); //show the frame in "Live Feed" window

    qDebug() << "Recording" << endl;

    if (waitKey(30) == 27)

    {
      qDebug() << "Esc key is pressed by user" << endl;
      break;
    }
  }
  return 0;
}

1 个答案:

答案 0 :(得分:2)

您是否尝试过设置属性来强制将捕获设置为HD:

cap.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);

如果是这样,请检查设备是否支持此解决方案,如guvcview或v4l2-ctl等其他程序。如果安装了最后一个,可以使用以下方法检查支持的模式: v4l2-ctl --list-formats