我在我的增强现实项目中使用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网络摄像头微软LifeCam工作室"成全屏直播视频与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上被选择。
我不知道如何解决它。我很乐意帮助你。
经过一段时间我找到了适合这个问题的决定。我在我的项目中包含了Media Foundation,并为此编写了简单的c++类。Media Foundation关于Windows 7和Windows 8网络摄像头视频捕获的一篇短文