1

私は拡張現実のプロジェクトでOpenCVを使用しています。元のプラットフォームはWindows7で、すべてが完璧に機能します。1080pのフルスクリーンです。ただし、Windows 8でプログラムを起動すると、解像度640x480のライブビデオが表示されました。同じハードウェア上の同じプログラムですが、OSが異なる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);に問題があると思います。しかし、私はそれを解決する方法がわかりません。

助けていただければ幸いです。

PS

私はいくつかの新しい情報を持っています:私はDirectShowを使用するためのテストプログラムを書きました。Webカメラ「USBWebカメラMicrosoftLifeCamStudio」を1080p品質のフルスクリーンライブビデオにキャプチャします。ただし、このプログラムをWindows 8で起動すると、解像度640x480のライブビデオしか表示されませんでした。

簡単なテストでは、IAMStreamConfigのメソッドSetFormat()がWindows 7ではHRESULT値S_OKを生成し、Windows8ではE_FAILを生成することが示されました。

それは次のリストに示されています:

 hr = streamConfTest->SetFormat(&mtGroup); 

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

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

最初のブランチはWindows7で選択され、2番目のブランチはWindows8で選択されます。

どうすれば解決できるかわかりません。助けていただければ幸いです。

4

1 に答える 1

0

しばらくして、この問題の適切な決定を見つけました。私は自分のプロジェクトにメディア ファンデーションを含め、このための単純な C++ クラスを作成しました。それに関する短い記事が、Media Foundation の Windows 7 および 8 の Web カメラからのビデオのキャプチャに示されています。

于 2013-03-25T01:13:42.600 に答える