我在增强现实项目中使用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。
它显示在下面的 list 中:
hr = streamConfTest->SetFormat(&mtGroup);
if(SUCCEEDED(hr))
{
printf("Success SetFormat( &mtGroup )");
}else
{
printf("Error SetFormat( &mtGroup )");
}
在Windows 7上选择第一个分支,在Windows 8上选择第二个分支。
我不知道如何解决。我会很高兴有任何帮助。
最佳答案
一段时间后,我找到了解决此问题的合适方法。我已经将Media Foundation包含在我的项目中,并为此编写了简单的C++类。关于它的简短文章显示在Capturing of video from web-camera on Windows 7 and 8 by Media Foundation上
关于opencv - Windows 8中的OpenCV相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15148909/