使用cvQueryFrame()捕获图像数据时获得最大分辨率

时间:2013-04-02 15:36:51

标签: opencv video-capture image-capture

我使用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上 - 当我在这些系统上尝试任何其他应用程序时,我得到了预期的完整原生分辨率。

谢谢!

2 个答案:

答案 0 :(得分: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类使用它来设置捕获设备选项。

答案 1 :(得分: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帧。