我正在尝试混合两个图像,或者你可以说将一个图像放在其他图像上,当我在图像上应用混合叠加或简单合并两个图像时,它会向我显示亮度。
这是我的两个图像(第一个小插图从内部是空的,它不包含中心的亮度)
,另一个是
我所做的代码是
int main( int argc, char** argv )
{
Mat img=imread("E:\\vig.png",-1);
Mat ch[4];
split(img,ch);
Mat im2 = ch[3]; // here's the vignette
im2 = 255 - im2; // eventually cure the inversion
Mat img2 = imread("E:\\ew.jpg");
Mat out2;
blending_overlay3(img2 , im2 , out2);
imshow("image",out2);
imwrite("E:\\image.jpg",out2);
waitKey();}
它显示了像
这样的结果但我需要像
这样的结果修改
第一张图片是空心的/空心的(小插图一张),但是当我用我的程序读取图像(小插图一张)然后它从中心变得坚固(明亮)时,其实现背后的历史是{{ 3}}
唯一的问题是它的第一个(晕影)图像读取,如果它按原样读取,就像从中心空心/空,这样我们合并/混合/重量的其他图像应用它没有影响图像的中心部分,甚至不显示亮度等,这就是我想做的事情
答案 0 :(得分:3)
它又是我:)看来你正在写新的photoshop。
我得到的结果:
代码:
#include <iostream>
#include <vector>
#include <stdio.h>
#include <functional>
#include <algorithm>
#include <numeric>
#include <cstddef>
#include "opencv2/opencv.hpp"
#include <iostream>
#include <fstream>
using namespace std;
using namespace cv;
int main( int argc, char** argv )
{
namedWindow("Image");
Mat Img1=imread("Img1.png",-1);
Mat Img2=imread("Img2.png");
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);
result=I1+I2;
imshow("Image",result);
waitKey(0);
}