2014-03-25 209 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