2013-03-01 41 views
1

我在我的Augment Reality項目中使用OpenCV。原始平臺是Windows 7,一切都很完美 - 全屏1080p。但是,當我在Windows 8上啓動我的程序時,它顯示分辨率爲640x480的實況視頻。同一個硬件上的相同程序,但與不同的操作系統Windows顯示不同的結果。我寫了簡單的測試程序,它表現出了同樣的問題:Windows 8中的OpenCV相機

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(捕獲,CV_CAP_PROP_FRAME_WIDTH,size.width);但我不知道如何解決它。

我會很高興任何幫助。

P.S.

我有一些新的信息: 我寫了使用DirectShow的測試程序。 它將網絡攝像頭「USB網絡攝像頭Microsoft LifeCam Studio」捕捉到1080p質量的全屏實況視頻中。但是,當我在Windows 8上啓動此程序時,它僅顯示640x480分辨率的實時視頻。

簡單測試表明,IAMStreamConfig的方法SetFormat()產生HRESULT值S_OK在Windows 7和E_FAIL在Windows 8.

它被示出在下一列表:

hr = streamConfTest->SetFormat(&mtGroup); 

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

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

第一分支是選擇在Windows 7上,第二個選擇在Windows 8上。

我不知道如何解決它。我會很高興任何幫助。

+0

這不就是說,您的凸輪的win7驅動程序支持調整大小,而win8驅動程序不是?我認爲,你的amstream實驗顯示,這不是opencv的錯,但是win8的驅動程序是責怪 – berak 2013-03-01 08:00:26

+0

我不認爲這是問題。我使用「USB網絡攝像頭Microsoft LifeCam Studio」,並在兩個操作系統上使用相同的驅動程序(該驅動程序包含在網絡攝像頭的內存中)。 – 2013-03-25 01:18:25

回答

0

有些時候我發現了這個問題的合適的決定。我在我的項目中包含了Media Foundation,併爲此編寫了簡單的C++類。關於它的簡短文章顯示在Capturing of video from web-camera on Windows 7 and 8 by Media Foundation

+0

我有完全相同的問題,除了我使用EmguCV(.NET C#封裝的OpenCV)。 – a432511 2014-06-17 17:26:55

+0

我不太清楚如何將你的工作集成到我的.NET C#項目中。你能提供一些方向嗎? – a432511 2014-06-17 17:27:15

+0

您可以創建缺陷和拉取請求,以便將代碼集成到OpenCV中嗎? – 2014-07-08 10:22:30