改变对比度

改变图像的对比度也是常用操作。在此操作中,图像中每个像素的值应乘以不等于1的正常数。要更改视频的对比度,应对视频中的每个帧执行相同的操作。
为了增加图像的对比度,图像中的每个像素应该乘以大于1的正常数。
new_image (i, j) = image(i, j) * c                    c > 1

为了降低图像的对比度,图像中的每个像素应乘以小于1的正常数。
new_image (i, j) = image(i, j) * c                0 < c < 1

有更多先进的方法来增强图像的对比度,例如直方图均衡。它增强了图像的对比度,使得强度分布在可用空间中均衡地平衡。我们将在下一课中讨论直方图均衡。

使用OpenCV更改图像的对比度

现在,我将向您展示如何使用OpenCV C++示例增加和减少图像的对比度。 建议首先浏览“载入并显示图像”,以便更好地理解以下示例。
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    //读取图像
    Mat image = imread("Christmas.jpg");

    //检测失败
    if (image.empty())
    {
        cout << "Could not open or find the image" << endl;
        cin.get(); //等待键盘
        return -1;
    }

    Mat imageContrastHigh2;
    image.convertTo(imageContrastHigh2, -1, 2, 0); //对比度2

    Mat imageContrastHigh4;
    image.convertTo(imageContrastHigh4, -1, 4, 0); //对比度4

    Mat imageContrastLow0_5;
    image.convertTo(imageContrastLow0_5, -1, 0.5, 0); //对比度0.5

    Mat imageContrastLow0_25;
    image.convertTo(imageContrastLow0_25, -1, 0.25, 0); //对比度0.25

    //创建窗口
    namedWindow("Original", WINDOW_NORMAL);
    namedWindow("Contrast2", WINDOW_NORMAL);
    namedWindow("Contrast4", WINDOW_NORMAL);
    namedWindow("Contrast0.5", WINDOW_NORMAL);
    namedWindow("Contrast0.25", WINDOW_NORMAL);

    //显示图像
    imshow("Original", image);
    imshow("Contrast2", imageContrastHigh2);
    imshow("Contrast4", imageContrastHigh4);
    imshow("Contrast0.5", imageContrastLow0_5);
    imshow("Contrast0.25", imageContrastLow0_25);

    waitKey(0); //等待键盘

    destroyAllWindows(); //毁灭窗口 们

    return 0;
}
将上面的代码段复制并粘贴到IDE中并运行它。请注意必须将代码中的“Christmas.jpg”替换为计算机中图像的有效位置。然后你应该看到一组像下面这样的图像。

增加对比度

减少对比度