【发布时间】:2014-06-15 20:25:56
【问题描述】:
我只想计算这张图片的晕影区域,就像我有图片here
如何仅在应用晕影的区域计算或迭代/通过并离开其他区域?我只想将算法应用于应用晕影的区域,我尝试将其设为红色标量并提取它发现红色的区域,但它不起作用,就像不给出结果一样,因为颜色在靠近中心时变得更亮图像。
vignette 通过将图像强度与以下蒙版相乘来使角落和边缘变暗:
这是here的原图
我想blending overlay**only vignette part of** vignette image 和original 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. ;
float blend = (float)img2.at<uchar>(i, 3*j+c)/255. ;
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);
}
int main( int argc, char** argv )
{
Mat Img1=imread("D:\\Vig.png",-1); // the vignete in the question
Mat Img2=imread("D:\\i.png"); // the iamge in the question
cv::resize(Img1,Img1,Img2.size());
Img1.convertTo(Img1,CV_32FC4,1.0/255.0);
Img2.convertTo(Img2,CV_32FC3,1.0/255.0);
vector<Mat> ch;
split(Img1,ch);
Mat mask = ch[3].clone(); // here's the vignette
ch.resize(3);
Mat I1,I2,result;
cv::multiply(mask,ch[0],ch[0]);
cv::multiply(mask,ch[1],ch[1]);
cv::multiply(mask,ch[2],ch[2]);
merge(ch,I1);
vector<Mat> ch2(3);
split(Img2, ch2);
cv::multiply(1.0-mask,ch2[0],ch2[0]);
cv::multiply(1.0-mask,ch2[1],ch2[1]);
cv::multiply(1.0-mask,ch2[2],ch2[2]);
merge(ch2,I2);
I1.convertTo(I1,CV_8UC3,255);
I2.convertTo(I2,CV_8UC3,255);
result=I1+I2; // The image with the vignette in the question
result.convertTo(result,CV_8UC4,255);
Mat result2;
Mat mask2;
Mat image = imread ("D:\\i.png"); // image in the question
blending_overlay(image,result,result2,mask2);
imshow("Image",result2);
waitKey(0);
}
它适用于将晕影图像与原始图像混合,但我只想将晕影图像中的晕影部分与原始图像混合
我得到的结果是this
【问题讨论】:
-
您可以简单地提取您想要的图像部分,对其进行处理,然后将这些像素复制回原始图像吗?另外,请原谅我的无知,但什么是 vignette?
-
我想要应用小插图后的图像部分
-
申请是什么意思?你真的没有对我说清楚
-
由于小插图应用于整个图像,所以这个问题没有意义。
标签: image opencv image-processing computer-vision