2013-03-01 127 views
1

我在我的Augment Reality项目中使用OpenCV。原始平台是Windows 7,一切都很完美 - 全屏1080p。但是,当我在Windows 8上启动我的程序时,它显示分辨率为640x480的实况视频。同一个硬件上的相同程序,但与不同的操作系统Windows显示不同的结果。我写了简单的测试程序,它表现出了同样的问题:Windows 8中的OpenCV相机

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(捕获,CV_CAP_PROP_FRAME_WIDTH,size.width);但我不知道如何解决它。

我会很高兴任何帮助。

P.S.

我有一些新的信息: 我写了使用DirectShow的测试程序。 它将网络摄像头“USB网络摄像头Microsoft LifeCam Studio”捕捉到1080p质量的全屏实况视频中。但是,当我在Windows 8上启动此程序时,它仅显示640x480分辨率的实时视频。

简单测试表明,IAMStreamConfig的方法SetFormat()产生HRESULT值S_OK在Windows 7和E_FAIL在Windows 8.

它被示出在下一列表:

hr = streamConfTest->SetFormat(&mtGroup); 

if(SUCCEEDED(hr)) 
{ 
    printf("Success SetFormat(&mtGroup)"); 

}else 
{ 
printf("Error SetFormat(&mtGroup)"); 
} 

第一分支是选择在Windows 7上,第二个选择在Windows 8上。

我不知道如何解决它。我会很高兴任何帮助。

+0

这不就是说,您的凸轮的win7驱动程序支持调整大小,而win8驱动程序不是?我认为,你的amstream实验显示,这不是opencv的错,但是win8的驱动程序是责怪 – berak 2013-03-01 08:00:26

+0

我不认为这是问题。我使用“USB网络摄像头Microsoft LifeCam Studio”,并在两个操作系统上使用相同的驱动程序(该驱动程序包含在网络摄像头的内存中)。 – 2013-03-25 01:18:25

回答

0

有些时候我发现了这个问题的合适的决定。我在我的项目中包含了Media Foundation,并为此编写了简单的C++类。关于它的简短文章显示在Capturing of video from web-camera on Windows 7 and 8 by Media Foundation

+0

我有完全相同的问题,除了我使用EmguCV(.NET C#封装的OpenCV)。 – a432511 2014-06-17 17:26:55

+0

我不太清楚如何将你的工作集成到我的.NET C#项目中。你能提供一些方向吗? – a432511 2014-06-17 17:27:15

+0

您可以创建缺陷和拉取请求,以便将代码集成到OpenCV中吗? – 2014-07-08 10:22:30