OpenCV';Windows 8中的s摄像头

OpenCV';Windows 8中的s摄像头,opencv,windows-8,camera,Opencv,Windows 8,Camera,我在增强现实项目中使用OpenCV。最初的平台是Windows7,一切都很完美——1080p全屏。然而,当我在Windows8上启动我的程序时,它显示了分辨率为640x480的实时视频。同一个程序在同一个硬件上,但在不同的操作系统窗口中显示不同的结果。我编写了一个简单的测试程序,显示了同样的问题: include "highgui.h" int main() { cvNamedWindow("VideoTest", CV_WINDOW_AUTOSIZE); CvCapture *captu

我在增强现实项目中使用OpenCV。最初的平台是Windows7,一切都很完美——1080p全屏。然而,当我在Windows8上启动我的程序时,它显示了分辨率为640x480的实时视频。同一个程序在同一个硬件上,但在不同的操作系统窗口中显示不同的结果。我编写了一个简单的测试程序,显示了同样的问题:

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\u CAP\u PROP\u FRAME\u WIDTH、size.WIDTH)存在问题;但我不知道如何解决它

我很高兴能得到任何帮助

附言

我有一些新信息: 我编写了使用DirectShow的测试程序。 它将网络摄像机“USB网络摄像机Microsoft LifeCam Studio”捕获为1080p质量的全屏实时视频。然而,当我在Windows8上启动这个程序时,它只显示分辨率为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上选择


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

经过一段时间,我找到了解决这个问题的合适方法。我在我的项目中已经包含了媒体基础,并为此编写了简单的C++类。有关它的短文显示在

上,这不就是说,您的cam的win7驱动程序支持调整大小,而win8驱动程序不支持吗?我认为,你的amstream实验表明,这不是opencv的错,但是win8的驱动程序应该归咎于我不认为这是问题所在。我使用“USB网络摄像头Microsoft LifeCam Studio”,并在两个操作系统上使用相同的驱动程序(此驱动程序包含在网络摄像头的内存中)。我有完全相同的问题,只是我使用的是EmguCV(.NET C#wrapper for OpenCV)。我不太确定如何将您的工作集成到我的.NET C#项目中。你能提供一些指导吗?你能创建一个缺陷和一个拉请求以便将你的代码集成到OpenCV中吗?