opencv - Windows 8中的OpenCV相机

标签 opencv windows-8 camera

我在增强现实项目中使用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/

相关文章:

windows-8 - WinRT 中的 GridSplitter 在哪里?

python - 处理相机旋转的正确方法

iphone - 如何在Xcode中打开全屏摄像头

c++ - 如何提高 estimateAffine2D(或 estimageRigidTransform)在 OpenCV 中的准确性?

opencv - 保存提取的特征opencv

c# - 拉伸(stretch) WrapGrid 项目宽度

windows-8 - 在 Windows 应用商店应用程序的代码隐藏中转到网格内的视觉状态

opengl-es - 在 WebGL 中创建 3D 自由相机 - 为什么这两种方法都不起作用?

android - Android OpenCV安装

c++ - 在 Linux 上构建 opencv_contrib 示例可执行文件 (OpenCV 3.0.0-alpha)