2014-03-25 213 views
1

我在C#中使用EmguCV教程捕捉網絡攝像頭。 預覽工作正常,但我不能改變像亮度,曝光等相機屬性,我需要在我的應用程序中實現這一點。在機制的文檔它說我應該CAP_PROP枚舉做到這一點,但它不工作,這是我的代碼,我改變亮度:如何使用EmguCV設置網絡攝像頭屬性?

_capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_BRIGHTNESS, newBrightnessValue); 

,但沒有任何變化......

我發現EmguCV論壇上作出一些迴應,他們說這不應該用EmguCV來完成,但是我已經完成了我大部分使用EmguCV的項目,並且我不想僅僅因爲這個而重新開始一些其他庫:/

是否有一些替代方案這樣做的方式,但不像DirectShow那麼複雜? 也許一些lib可以設置這些屬性,而不需要改變我使用Emgu CV創建的代碼的其餘部分?

回答

0

您可以直接操縱圖像捕捉後的亮度,對比度,伽瑪值。

所以一些技巧會是這樣的。

Image<Bgr, byte> myImage;// you can store a static image from disk or 
         //load one from web cam frame in it 

myImage= myImage.Mul(brightValue);// multiply the image with decimal number 
            //to increase the brightness 

myImage._EqualizeHist(); //to improve the contrast read documentation, 
         //as you can play around the threshold values too. 

myImage._GammaCorrect(1.8d);// give a decimal value to adjust the gamma value 

您可以參考this post,因爲它可能有所幫助。

+1

你可以找到和這裏http://www.emgu.com/wiki/index.php設置攝像頭捕獲性能的例子嗎? title = Camera_Capture,但如果相機不支持它,溼婆方法將是最好的選擇 – Chris

+0

是的,我知道這一點,但我也需要設置曝光和白平衡。 AFAIK這樣設置曝光是不可能的,它必須在拍攝圖像之前完成。有沒有簡單的方法來訪問曝光設置,而無需更改我的所有代碼?相機是中國人,與DirectShow兼容。我嘗試過使用DirectShowNET庫,但對我來說太複雜了。使用EmguCV,我可以輕鬆捕捉框架並對其進行操作,但它在相機設置中存在此問題。 所以我想知道是否有一小塊代碼可以幫助我設置曝光。 – user3460905

2

我都面臨着同樣的問題,發現這是工作:

CvInvoke.cvSetCaptureProperty(_capture.Ptr, CAP_PROP.CV_CAP_PROP_BRIGHTNESS, newBrightnessValue); 
+1

這適用於EmguCV的哪個版本? '3.1.0.1'似乎沒有'Emgu.CV.CvInvoke.cvSetCaptureProperty'方法。它確實有'CvInvoke.cveVideoCaptureSet'。 – dthor