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