在OpenCV中标准化相机输入?(对比度/饱和度/亮度等)

3
我正在使用OpenCV构建一个应用程序,它使用网络摄像头并运行一些视觉算法。完成后,我希望将此应用程序在互联网上提供,但我担心每台计算机上的摄像头设置差异很大,如果与我的设置差异太大,则算法可能会崩溃。
在捕获帧后,是否有任何方法进行后处理,并确保对比度为X,亮度为Y和饱和度为Z?我认为当前的OpenCV Python绑定不能直接从代码更改相机设置。
请问有人能告诉我如何从图像中计算出这些参数,并使用OpenCV适当地调整它们吗?
2个回答

3
你可以通过多种方式在openCV中后处理你的图像。
要设置对比度,你可以使用equalizeHist函数。
要设置亮度和饱和度,你应该先使用cvtColor将图像转换为HSV颜色空间。然后,你可以通过直接访问每个图像像素来修改饱和度和值(亮度)到适当的值。

你好Rics,能告诉我一个问题吗?我们可以在OpenCV中增加和减少图像的清晰度吗? - Rahul Jain
这里有一个stackoverflow的参考链接,希望能回答你的问题:https://dev59.com/nG445IYBdhLWcg3wLXWh - rics

2

我有点在同样的问题上苦苦挣扎。下面是一段代码,可以去除图像中的所有值(亮度)信息,使其在光照变化很大的情况下更加稳定。当然,您也可以调整其他参数:

    // img is an rgb image
    cvCvtColor(img, img, CV_RGB2HSV);
    for( int y=0; y<img->height; y++ ) {
        uchar* ptr = (uchar*) (
            img->imageData + y * img->widthStep
        );
        for( int x=0; x<img->width; x++ ) {
            ptr[3*x+2] = 255; // maxes the value,
            // use +1 for saturation, +0 for hue
        }
    }

    // convert back for displaying
    cvCvtColor(img, img, CV_HSV2RGB);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接