c++ - 尝试使用 Qt 和 OpenCV 从高清网络摄像头获取 1080p 实时视频只能获取 480p

标签 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;
}

最佳答案

您是否尝试过通过设置属性来强制捕获高清格式:

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

如果是这样,请在 guvcview 或 v4l2-ctl 等其他程序中检查设备是否支持该分辨率。如果您安装了最后一个,您可以通过以下方式检查支持的模式: v4l2-ctl --list-formats

关于c++ - 尝试使用 Qt 和 OpenCV 从高清网络摄像头获取 1080p 实时视频只能获取 480p,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25059237/

相关文章:

c++ - OpenGL : How to use glMapBuffer with Qt?

c++ - 在稍后调用删除的对象上工作是否安全

c++ - setHeaderData 不工作 + qt

c# - 从 c# 调用的非托管 c++ dll,在 dll 中使用 CString 时崩溃

linux - 创建文件并将其放入文件夹 - Bash 脚本

linux - 使用curl shell脚本登录后上传文件

linux - 在教程中无法启动 AWS Elastic Beanstalk

java - 转换类型 JNI JAVA

c++ - VS 自动并行化

javascript - 如何在 ACE 中加载 XML?