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

3 投票
2 回答
5307 浏览
提问于 2025-04-15 22:08

我正在用OpenCV开发一个应用程序,这个程序会使用网络摄像头并运行一些视觉算法。等我完成后,我想把这个应用放到网上,但我有点担心每台电脑的摄像头设置差别很大,如果设置和我的差别太大,算法可能会出问题。

有没有办法在捕捉到画面后,对它进行后处理,确保对比度是X,亮度是Y,饱和度是Z?我觉得现在的OpenCV Python接口不能直接通过代码来改变摄像头的设置。

有没有人能告诉我,如何从图像中计算这些参数,并使用OpenCV适当地调整它们?

2 个回答

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);
3

在openCV中,你可以用几种方法来处理你的图片。

如果想调整对比度,可以使用 equalizeHist 这个函数。

要调整亮度和饱和度,首先需要把图片转换成HSV颜色空间,这可以通过 cvtColor 来实现。然后,你可以直接访问每个像素,修改饱和度和亮度(值)到合适的数值。

撰写回答