【问题标题】:How increase the contrast of an image with opencv c++?如何使用 opencv c++ 增加图像的对比度?
【发布时间】:2025-12-10 13:20:07
【问题描述】:

我想增加下图的contrast,加上opencv c++

我使用histogram 处理技术,例如,直方图均衡化(HE),直方图规范等。但我没有达到良好的效果,例如波纹管图像:

你对如何solve这个任务有什么建议?或者我可以在internet 上的什么资源上找到帮助?

【问题讨论】:

    标签: c++ opencv image-processing


    【解决方案1】:

    我在 OpenCV 上找到了一个有用的主题,用于更改图像对比度:

    #include <cv.h>
    #include <highgui.h>
    #include <iostream>
    
    using namespace cv;
    
    double alpha; /**< Simple contrast control */
    int beta;  /**< Simple brightness control */
    
    int main( int argc, char** argv )
    {
     /// Read image given by user
     Mat image = imread( argv[1] );
     Mat new_image = Mat::zeros( image.size(), image.type() );
    
     /// Initialize values
     std::cout<<" Basic Linear Transforms "<<std::endl;
     std::cout<<"-------------------------"<<std::endl;
     std::cout<<"* Enter the alpha value [1.0-3.0]: ";std::cin>>alpha;
     std::cout<<"* Enter the beta value [0-100]: "; std::cin>>beta;
    
     /// Do the operation new_image(i,j) = alpha*image(i,j) + beta
     for( int y = 0; y < image.rows; y++ )
        { for( int x = 0; x < image.cols; x++ )
             { for( int c = 0; c < 3; c++ )
                  {
          new_image.at<Vec3b>(y,x)[c] =
             saturate_cast<uchar>( alpha*( image.at<Vec3b>(y,x)[c] ) + beta );
                 }
        }
        }
    
     /// Create Windows
     namedWindow("Original Image", 1);
     namedWindow("New Image", 1);
    
     /// Show stuff
     imshow("Original Image", image);
     imshow("New Image", new_image);
    
     /// Wait until user press some key
     waitKey();
     return 0;
    }
    

    见:Changing the contrast and brightness of an image!

    【讨论】:

    • 这是一个线性变换,并没有达到很好的效果,例如顶部的图像。
    • @AlirezaAlipourBloordokani 还有其他线性变换方法吗?这可以帮助你吗?见:the fastest way to increase color image contrast...
    • 我使用了所有技术,但它们没有达到好的效果,例如顶部的图像。我需要一个强大的算法.....
    • @AlirezaAlipourBloordokani 我可以为您提供阅读图像处理书籍。因为它分析所有方法,例如:人工智能。也许这可以帮助你。
    • 我阅读了《OpenCV 2 计算机视觉应用程序编程食谱》和《学习 OpenCV》,但它们帮不了我。
    【解决方案2】:

    我不是专家,但您可以尝试通过将灰色合并为深灰色并将浅灰色合并为白色来减少颜色数量。

    例如:

    • 在 范围内找到最不常见的颜色,将其合并为白色。

    这将减少颜色的数量,并有助于在较亮的较暗颜色之间产生间隙也许

    【讨论】:

    【解决方案3】:

    这可能会迟到,但您可以尝试 openCV 中的 createCLAHE() 函数。适合我。

    【讨论】: