我在增强现实项目中使用 OpenCV。最初的平台是 Windows 7,一切正常——全屏 1080p。但是,当我在 Windows 8 上启动我的程序时,它会显示分辨率为 640x480 的实时视频。相同硬件上的相同程序,但使用不同的操作系统 Windows 显示不同的结果。我写了一个简单的测试程序,它显示了同样的问题:
include "highgui.h"
int main()
{
cvNamedWindow("VideoTest", CV_WINDOW_AUTOSIZE);
CvCapture *capture = cvCreateCameraCapture(0);
CvSize size = cvSize(1920, 1080);
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH , size.width);
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT , size.height);
IplImage* frame;
while(1)
{
frame = cvQueryFrame(capture);
if(!frame) break;
cvShowImage("VideoTest", frame);
char c = cvWaitKey(33);
if(c == 27) break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("VideoTest");
return 0;
}
我认为 - cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, size.width); 有问题 但我不知道如何解决它。
我会很高兴任何帮助。
附言
我有一些新信息:我编写了使用 DirectShow 的测试程序。它将网络摄像头“USB Web-camera Microsoft LifeCam Studio”捕获为 1080p 质量的全屏实时视频。然而,当我在 Windows 8 上启动这个程序时,它只显示了 640x480 分辨率的实时视频。
简单测试表明,IAMStreamConfig 的方法 SetFormat() 在 Windows 7 上产生 HRESULT 值 S_OK,在 Windows 8 上产生 E_FAIL。
它显示在下一个清单中:
hr = streamConfTest->SetFormat(&mtGroup);
if(SUCCEEDED(hr))
{
printf("Success SetFormat( &mtGroup )");
}else
{
printf("Error SetFormat( &mtGroup )");
}
第一个分支是在 Windows 7 上选择的,第二个是在 Windows 8 上选择的。
我不知道如何解决它。我会很高兴任何帮助。