-1

我使用 OpenCV 和这段代码(仅相关片段)从高清摄像头捕获一些图像数据:

data->capture =cvCaptureFromCAM(data->config.device); // open the device
...
IplImage *grabFrame=cvQueryFrame(data->capture);

使用此代码,我总是得到一个大小为 640x480 的grabFrame,而相机支持 1920x1080。当我在初始化后做类似的事情时:

cvSetCaptureProperty(data->capture,CV_CAP_PROP_FRAME_WIDTH,1920);
cvSetCaptureProperty(data->capture,CV_CAP_PROP_FRAME_HEIGHT,1080);

我得到了真正的高清分辨率的结果——但图像模糊,这意味着它只能从 640x480 放大到高清分辨率。那么:如何强制 OpenCV 真正使用填充原生分辨率?

它似乎不是驱动程序/硬件问题,因为它发生在 Windows 和 Linux 上 - 当我在这些系统上尝试任何其他应用程序时,我得到了预期的完整的本机分辨率。

谢谢!

4

2 回答 2

0

1.来自(旧)opencv C 文档:

The function cvSetCaptureProperty() sets the specified property of video capturing.     
Currently the function supports only video files: CV_CAP_PROP_POS_MSEC, CV_CAP_PROP_POS_FRAMES, CV_CAP_PROP_POS_AVI_RATIO.

2.您可以尝试使用 openNI 编译 opencv,因为VideoCapture类使用它来设置捕获设备选项。

于 2013-04-02T15:46:57.910 回答
0

它帮助了我:

static const int MAX_WIDTH_RESOLUTION = 7680;
static const int MAX_HEIGHT_RESOLUTION = 4800;

cvCreateCameraCapture(...);
cvSetCaptureProperty(pCam, CV_CAP_PROP_FRAME_WIDTH, MAX_WIDTH_RESOLUTION);
cvSetCaptureProperty(pCam, CV_CAP_PROP_FRAME_HEIGHT, MAX_HEIGHT_RESOLUTION);
cvQueryFrame(...);

使用两个不同的网络摄像头,我有 1900x1080 和 1280x960 帧。

于 2016-02-11T10:41:21.633 回答