gpt4 book ai didi

c++ - 合并两个显示亮度的图像

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:48 24 4
gpt4 key购买 nike

我正在尝试混合两个图像,或者你可以说将一个图像放在另一个图像上,当我在图像上应用混合叠加层或简单合并两个图像时,它会显示其中的亮度。

这是我的两张图片(第一个小插图从内部看是空的,中间不包含亮度)

另一个是

我做的代码是

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();}

它向我展示了这样的结果

但我需要这样的结果

编辑

第一张图片从中心(小插图)是空心/空的,但是当我用我的程序读取图像(小插图)时,它从中心变成实心(明亮),其实现背后的历史是 here

唯一的问题是第一个(小插图)图像读取,如果它按原样读取,就像从中心空心/空的,那么我们合并/混合/加权的其他图像无论应用它没有不要影响图像的中心部分,甚至不显示亮度等,这就是我想要做的

最佳答案

又是我 :) 看来你在写新的 photoshop。

我得到的结果: enter image description here

代码:

#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);
}

关于c++ - 合并两个显示亮度的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23801988/

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