gpt4 book ai didi

image - 如何在 OpenCV 中的两个图像之间应用 SoftLight 混合器?

转载 作者:太空宇宙 更新时间:2023-11-03 21:35:49 26 4
gpt4 key购买 nike

关于 this post on StackOverflow (和 this too )我正在拍摄一张正常的花朵图像,然后是一张白色图像,然后应用柔光。

这些是图像(白色图像):

enter image description here

结果应该与我在 GIMP 中得到的结果类似:

enter image description here

但它最终是一个白色图像

enter image description here

我修改了代码以便将其放入一个函数中,这是我的代码:

// function
uint convSoftLight(int A, int B) {

return ((uint)((B < 128)?(2*((A>>1)+64))*((float)B/255):(255-(2*(255-((A>>1)+64))*(float)(255-B)/255))));
}

void function() {
Mat flower = imread("/Users/rafaelruizmunoz/Desktop/flower.jpg");
Mat white_flower = Mat::zeros(Size(flower.cols, flower.rows), flower.type());
Mat mix = Mat::zeros(Size(flower.cols, flower.rows), flower.type());

for (int i = 0; i < white_flower.rows; i++) {
for (int j = 0; j < white_flower.cols; j++) {
white_flower.at<Vec3b>(i,j) = Vec3b(255,255,255);
}
}

imshow("flower", flower);
imshow("mask_white", white_flower);

for (int i = 0; i < mix.rows; i++) {
for (int j = 0; j < mix.cols; j++) {
Vec3b vec = flower.at<Vec3b>(i,j);
vec[0] = convSoftLight(vec[0], 255); // 255 or just the white_flower pixel at (i,j)
vec[1] = convSoftLight(vec[1], 255); // 255 or just the white_flower pixel at (i,j)
vec[2] = convSoftLight(vec[2], 255); // 255 or just the white_flower pixel at (i,j)
mix.at<Vec3b>(i,j) = vec;
}
}


imshow("mix", mix);
}

我做错了什么?

谢谢。


编辑:我试图翻转顺序(convSoftLight(B,A); 而不是 convSoftLight(A,B)),但什么也没发生(黑色图像)

最佳答案

基于blender definitions:我重写了我的函数:

uint convSoftLight(int A, int B) {

float a = (float)A / 255;
float b = (float)B / 255;
float result = 0;

if (b < 0.5)
result = 2 * a * b + pow(a,2) * (1 - 2*b);
else
result = 2 * a * (1-b) + sqrt(a) * (2*b - 1);

return (uint)255* result;
}

关于image - 如何在 OpenCV 中的两个图像之间应用 SoftLight 混合器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29819036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com