#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
// 定义图像路径
String img_path1 = "image1.jpg";
String img_path2 = "image2.jpg";
// 读取图像
Mat img1 = imread(img_path1);
Mat img2 = imread(img_path2);
// 图像分离
vector<Mat> bgr1, bgr2;
split(img1, bgr1);
split(img2, bgr2);
// 计算每个通道的平均值
double mean_b1 = mean(bgr1[0])[0];
double mean_g1 = mean(bgr1[1])[0];
double mean_r1 = mean(bgr1[2])[0];
double mean_b2 = mean(bgr2[0])[0];
double mean_g2 = mean(bgr2[1])[0];
double mean_r2 = mean(bgr2[2])[0];
// 计算增益系数
double kb = (mean_g1 + mean_g2) / (mean_b1 + mean_b2);
double kr = (mean_g1 + mean_g2) / (mean_r1 + mean_r2);
// 调整每个通道的增益
Mat b_adjusted1 = bgr1[0] * kb;
Mat r_adjusted1 = bgr1[2] * kr;
Mat b_adjusted2 = bgr2[0] * kb;
Mat r_adjusted2 = bgr2[2] * kr;
// 合并通道
vector<Mat> channels_adjusted1 = {b_adjusted1, bgr1[1], r_adjusted1};
vector<Mat> channels_adjusted2 = {b_adjusted2, bgr2[1], r_adjusted2};
Mat img_adjusted1, img_adjusted2;
merge(channels_adjusted1, img_adjusted1);
merge(channels_adjusted2, img_adjusted2);文章来源:https://www.toymoban.com/news/detail-401998.html
// 显示调整后的图像
imshow("Image 1 Adjusted", img_adjusted1);
imshow("Image 2 Adjusted", img_adjusted2);
waitKey(0);
return 0;
}
文章来源地址https://www.toymoban.com/news/detail-401998.html
到了这里,关于图像匀光匀色的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!