私は拡張現実のプロジェクトで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で選択されます。
どうすれば解決できるかわかりません。助けていただければ幸いです。