07_Opencv调整图像对比度和亮度

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gzx110304/article/details/88719521

07_Opencv调整图像对比度和亮度

一.公式

  • dst = alpha*src + beta
  • alpha > 0,控制图像对比度
  • beta是增益变量,控制图像亮度

二.通过像素指针的方式实现对比度和亮度调节

    Mat src = imread("/Users/zhixingao/Downloads/android/OpencvForCPlus/素材/莱娜.png");
    if(src.empty()) {
        cout << "could not load image 莱娜.png ...\n" << endl;
    }
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);
    
    //通过像素指针的方式调整图像的对比度和亮度
    int rows = src.rows;
    int cols = src.cols;
    int channels = src.channels();
    Mat dst(src.size(), src.type());

    for(int row=0; row<rows; row++) {
        const uchar* currentSrcRow = src.ptr<uchar>(row);
        uchar* currentDstRow = dst.ptr<uchar>(row);
        for(int col=0; col<cols*channels; col++) {
            currentDstRow[col] = saturate_cast<uchar>(alpha * currentSrcRow[col] + beta);
        }
    }
    
    namedWindow("output image", CV_WINDOW_AUTOSIZE);
    imshow("output image", dst);

在这里插入图片描述

三.通过读写像素的方式实现对比度和亮度的调节

    Mat src = imread("/Users/zhixingao/Downloads/android/OpencvForCPlus/素材/莱娜.png");
    if(src.empty()) {
        cout << "could not load image 莱娜.png ...\n" << endl;
    }
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);
    
    //通过读取像素的方式调整图像的对比度和亮度
    int rows = src.rows;
    int cols = src.cols;
    int channels = src.channels();
    Mat dst(src.size(), src.type());

    for(int row=0; row<rows; row++) {
        for(int col=0; col<cols; col++) {
            if(channels == 3) {
                Vec3b intensity = src.at<Vec3b>(row, col);
                dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(alpha*intensity[0] + beta);
                dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(alpha*intensity[1] + beta);
                dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(alpha*intensity[2] + beta);
            } else if(channels == 1) {
                uchar intensity = src.at<uchar>(row, col);
                dst.at<uchar>(row, col) = saturate_cast<float>(alpha*intensity + beta);
            }
        }
    }
    
    namedWindow("output image", CV_WINDOW_AUTOSIZE);
    imshow("output image", dst);

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/gzx110304/article/details/88719521