我正在努力达到这个结果
但是我正在尝试的是
Mat out = imread ("F:\\image.jpg");
Mat img2 = Mat(out.size(),out.type());
cv_Gamma(out,image ,0.7);
blending_overlay(image , out , image);
这给我以下结果
原始图像是
看起来我的图像中缺少亮度,但是当我增加亮度时仍然无法提供所需的结果
编辑
混合叠加
void blending_overlay(Mat& img1 , Mat& img2 , Mat& out)
{
Mat result(img1.size(), CV_32FC3);
for(int i = 0; i < img1.size().height; ++i){
for(int j = 0; j < img1.size().width; ++j){
for (int c=0 ; c<img1.channels();c++){
float target = (float)img1.at<uchar>(i, 3*j+c)/255.0 ;
float blend = (float)img2.at<uchar>(i, 3*j+c)/255.0 ;
if(target > 0.5){
result.at<float>(i, 3*j+c) = ((1 - (1-2*(target-0.5)) * (1-blend)));
}
else{
result.at<float>(i, 3*j+c) = ((2*target) * blend);
}
}
}
}
result.convertTo(out,CV_8UC3,255);
}
实际上,我已经尝试了每种混合模式,对此我了解的是,我可以乘以从黄色到白色的线性渐变来进行乘积,但是如何使该渐变对我来说是无法理解的。关于这种情况的任何
algorithm
也将不胜感激。
最佳答案
似乎您需要 Gamma 校正。
在这里看看:
http://subokita.com/2013/06/18/simple-and-fast-gamma-correction-on-opencv/
以及以上链接的来源(带有来源/结果图片):
http://imagingsolution.net/program/opencv/gamma-correction/
关于image - 图像中的亮度没有调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23526268/