首页 > 解决方案 > 如何在 OpenCv c++ 中获取图像像素亮度和对比度?

问题描述

如何获得像素范围的亮度和对比度并将其应用于opencv c ++中另一个图像的渐变?我试图用这段代码做到这一点,但我没有得到一个好的结果

我想将 image1 的第二部分的亮度和对比度应用到 image2 的第一部分以应用渐变。最终目标是拼接两个图像

在此处输入图像描述

Mat image = imread("1.jpg" );
Mat image2 = imread("2.jpg" );
const int darkness_threshold = 128;


cv::Mat hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
const auto result = cv::mean(hsv);

cv::Mat hsv2;
cvtColor(image2, hsv2, COLOR_BGR2HSV);
const auto result2 = cv::mean(hsv2);

cout<<"resultat1: "<<result<<endl;
cout<<"resultat2: "<<result2<<endl;


Mat new_image = Mat::zeros( image.size(), image.type() );
double alpha = result2[0] - result[0]; 
double beta = result2[2] - result[2];      
for( int y = 0; y < image.rows; y++ ) {
    for( int x = 0; x < image.cols; x++ ) {
        for( int c = 0; c < image.channels(); c++ ) {
            new_image.at<Vec3b>(y,x)[c] =
              saturate_cast<uchar>( alpha*image.at<Vec3b>(y,x)[c] + beta );
        }
    }
}
namedWindow("New Image",WINDOW_NORMAL);
imshow("New Image", new_image);
namedWindow("Image2",WINDOW_NORMAL);
imshow("Image2", image2);

imwrite("imgs1.jpg",new_image);
imwrite("imgs2.jpg",image2);
waitKey();
return 0;

标签: c++opencv

解决方案


推荐阅读