【问题标题】:How to set webcam properties with EmguCV?如何使用 EmguCV 设置网络摄像头属性?
【发布时间】:2014-03-25 17:33:32
【问题描述】:

我按照 EmguCV 教程使用 C# 制作了一个用于捕获网络摄像头的应用程序。 预览工作正常,但我无法更改亮度、曝光等相机属性,我需要在我的应用程序中实现这一点。在文档中说我应该使用 CAP_PROP Enumeration 来做,但它不起作用,这是我更改亮度的代码:

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

但没有任何改变......

我在 EmguCV 论坛上找到了一些回复,他们说这不应该用 EmguCV 完成,但我已经使用 EmguCV 完成了大部分项目,因此我不想重新开始使用其他库:/

有没有其他方法可以做到这一点,但不像 DirectShow 那样复杂? 也许一些可以设置这些属性的库,而无需更改我使用 Emgu CV 制作的其余代码?

【问题讨论】:

    标签: c# opencv webcam directshow emgucv


    【解决方案1】:

    我遇到了同样的问题,发现这是有效的:

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

    【讨论】:

    • 这适用于 EmguCV 的哪个版本? 3.1.0.1 似乎没有 Emgu.CV.CvInvoke.cvSetCaptureProperty 方法。它确实有CvInvoke.cveVideoCaptureSet
    【解决方案2】:

    您可以在捕获图像后直接控制其亮度、对比度、伽玛值。

    所以有些技巧会是这样的。

    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,因为它可能会有所帮助。

    【讨论】:

    • 您可以在emgu.com/wiki/index.php?title=Camera_Capture 找到设置相机捕捉属性的示例,但如果相机不支持它,Shiva 方法将是最佳选择
    • 是的,我知道,但我还需要设置曝光和白平衡。 AFAIK 无法以这种方式设置曝光,必须在捕获图像之前完成。是否有任何简单的方法可以访问曝光设置而无需更改我的所有代码?相机是中文的,兼容DirectShow。我尝试使用 DirectShowNET 库,但它对我来说太复杂了。使用 EmguCV,我可以轻松捕获帧并对其进行操作,但是相机设置存在这个问题。所以我想知道是否有一些代码可以帮助我设置曝光。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2016-03-05
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多