美文网首页
《OpenCV》四、调整图片对比度和亮度:y=ax+b

《OpenCV》四、调整图片对比度和亮度:y=ax+b

作者: GoodTekken | 来源:发表于2021-10-11 08:38 被阅读0次

代码如下:

#include <opencv2/opencv.hpp> 
#include <iostream> 
//#include <direct.h>
using namespace cv;
using namespace std;

const char* output_win = "mat-demo";
int alpha_value = 1;
int alpha_max = 100;
int beta_value = 1;
int beta_max = 100;

void Demo_Contours(int, void*);
cv::Mat src;
cv::Mat mat;

int main()
{
    src = cv::imread("bin\\图片库\\Test1.jpg");//原图的分辨率是Rows:756,Cols:1008;

    int channels = src.channels();

    cv::Mat dst(src.rows, src.cols, CV_8UC3, Scalar(1, 1, 255)); //3 channel matrix

    if (channels == 3)
    {
        for(int row=0;row<src.rows;row++)
            for (int col = 0; col < src.cols; col++)
            {

                if (src.at<Vec3b>(row, col)[2] > 128)
                {
                    dst.at<Vec3b>(row, col)[0] = 255;
                    dst.at<Vec3b>(row, col)[1] = 255;
                    dst.at<Vec3b>(row, col)[2] = 255;
                }
                else
                {
                    dst.at<Vec3b>(row, col)[0] = 0;
                    dst.at<Vec3b>(row, col)[1] = 0;
                    dst.at<Vec3b>(row, col)[2] = 0;
                }
            }
    }

    namedWindow("src", CV_WINDOW_AUTOSIZE);
    namedWindow(output_win, CV_WINDOW_AUTOSIZE);
    imshow("src", src);
    //cvtColor(src, src, CV_BGR2GRAY);

    const char* trackbar_title1 = "Alpha:";
    createTrackbar(trackbar_title1, output_win, &alpha_value, alpha_max, Demo_Contours);

    const char* trackbar_title2 = "Beta:";
    createTrackbar(trackbar_title2, output_win, &beta_value, beta_max, Demo_Contours);
    Demo_Contours(0, 0);

    imshow("dst", dst);
    int a = mat.type();
    waitKey(0);
    return 0;
}

void Demo_Contours(int, void*) {

    float alpha = alpha_value / 100.0;
    float beta = beta_value / 100.0;

    cv::Mat mat(src.rows, src.cols, CV_32FC3, Scalar(1, 1, 255)); //3 channel matrix // 获取图像宽、高
    for (int row = 0; row < src.rows; row++)
        for (int col = 0; col < src.cols; col++)
        {
        mat.at<Vec3f>(row, col)[0] = (float)(src.at<Vec3b>(row, col)[0] / 256.0); //read color values for pixel (y,x)
        mat.at<Vec3f>(row, col)[1] = (float)(src.at<Vec3b>(row, col)[1] / 256.0); //read color values for pixel (y,x)
        mat.at<Vec3f>(row, col)[2] = (float)(src.at<Vec3b>(row, col)[2] / 256.0); //read color values for pixel (y,x)

        float b = (float)(src.at<Vec3b>(row, col)[0] / 256.0);// blue
        float g = (float)(src.at<Vec3b>(row, col)[1] / 256.0); // green
        float r = (float)(src.at<Vec3b>(row, col)[2] / 256.0); // red

        mat.at<Vec3f>(row, col)[0] = saturate_cast<float>(b * alpha+beta);
        mat.at<Vec3f>(row, col)[1] = saturate_cast<float>(g * alpha+beta);
        mat.at<Vec3f>(row, col)[2] = saturate_cast<float>(r * alpha+beta);

        float temp = saturate_cast<float>(r * alpha + beta);

        }
    imshow(output_win, mat);
}

相关文章

网友评论

      本文标题:《OpenCV》四、调整图片对比度和亮度:y=ax+b

      本文链接:https://www.haomeiwen.com/subject/fdnqoltx.html