OpenCV的Windows 8相机

时间:2013-03-01 01:28:31

标签: opencv windows-8 camera

我在Augment Reality的项目中使用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);但我不知道如何解决它。

我会很高兴任何帮助。

P.S。

我有一些新信息: 我编写了使用DirectShow的测试程序。 它将网络摄像头“USB网络摄像头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上选择第二个分支。

我不知道如何解决它。我很乐意帮助你。

1 个答案:

答案 0 :(得分:0)

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