c++ - 如何在 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;
解决方案
推荐阅读
- java - 如何在 Java 中删除 Azure 容器注册表上的 Docker 映像?
- r - 如何使用 r 计算每行中的字母数?
- php - 如何在 PHP 服务器运行 cron 作业调度 PHP 脚本时停止请求?
- ruby-on-rails - Pandoc 不转换文件 doc 有数学到文件乳胶
- javascript - 在 Unity 中结束游戏 - 字母游戏
- elasticsearch - Elasticsearch 中不直接显示空字段?
- mysql - SQL:如何将 2 个查询合二为一,使用 2 个不同的 GROUP BY 指令
- javascript - 时刻时间正在返回 UTC 时间而不是本地时间
- ajax - 如何将一些数据和图像从 AJAX 发送到 Laravel 中的控制器?
- excel - Excel VBA - 将整个工作簿的蓝色阴影单元格更改为绿色