【发布时间】:2021-03-02 07:20:31
【问题描述】:
我遇到的问题是我无法更改 OpenCV 视频捕获的分辨率。无论如何,分辨率始终为 640x480。我使用的代码是用 C++ 编写的,我使用的是 opencv 3.4.8。我创建了一个超级简单的程序来执行此操作,但无论我尝试什么,它似乎都不起作用。
这里是完整的代码:
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0);
cap.set(CAP_PROP_FRAME_HEIGHT, 1080);
cap.set(CAP_PROP_FRAME_WIDTH, 1920);
// open the default camera, use something different from 0 otherwise;
// Check VideoCapture documentation.
if (!cap.open(0))
return 0;
for (;;)
{
Mat frame;
cap.read(frame);
if (frame.empty()) break; // end of video stream
imshow("this is you, smile! :)", frame);
if (waitKey(10) == 27) break; // stop capturing by pressing ESC
}
// the camera will be closed automatically upon exit
// cap.close();
return 0;
}
当我运行上面的代码时,帧总是 640x480。
我尝试将cap.set() 的分辨率更改为更小和更高的分辨率。我正在使用 ImageSource 相机,并且我知道我尝试使用的分辨率受相机支持,我可以在另一个程序中以这些分辨率查看视频。
我尝试过使用不同的相机/网络摄像头。
我尝试在创建 VideoCapture 对象时显式更改后端 API - 即 VideoCapture cap(0, CAP_DSHOW)。我试过DSHOW、FFMPEG、IMAGES等。
我尝试在不同的计算机上运行相同的程序。
结果始终是相同的 640x480 分辨率。
我缺少一些简单的东西吗?我似乎可以在 SO 上找到的所有其他帖子都指向使用 cap.set() 更改宽度和高度。
【问题讨论】:
-
分享相机型号或链接可以帮助您解决此类问题
-
@YunusTemurlenk 感谢您的回复!不幸的是,尝试“VideoCapture cap(1)”、“VideoCapture cap(2)”等都不起作用。我们最初使用的相机是 Imaging Source DMK 33GX183。但是,我已经在多台计算机上的多个摄像头和网络摄像头上进行了尝试。所以这个问题似乎并不特定于成像源相机。