我正在努力实现这个结果
但我正在尝试的是
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
也将受到赞赏。
答案 0 :(得分:1)
您似乎需要进行伽马校正。
看看这里:
http://subokita.com/2013/06/18/simple-and-fast-gamma-correction-on-opencv/
和上面的链接源(包含源/结果图片):