设为首页收藏本站 |天气与日历| 2025-08-23 星期六 03:09:00 乙巳(蛇)年 七月初一 寅时 处暑
     
切换到窄版

私人站点

 找回密码
 立即注册
搜索
查看: 420|回复: 0

图像混合

[复制链接]

954

主题

954

帖子

3879

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3879
发表于 2022-2-21 09:46:38 | 显示全部楼层 |阅读模式
理论
-线性混合操作

3333.jpg
相关API (addWeighted)


[C++] 纯文本查看 复制代码
void cvAddWeighted(
 const CvArr* src1, 
double alpha,
const CvArr* src2, 
double beta,
double gamma,
 CvArr* dst );



参数1:输入图像Mat – src1(第一张图像)
参数2:输入图像src1的alpha值(权重)
参数3:输入图像Mat – src2(另一张图像)
参数4:输入图像src2的alpha值(权重)
参数5:gamma值(校验值)
参数6:输出混合图像

注意点:两张图像的大小和类型必须一致才可以
[C++] 纯文本查看 复制代码
dst=(I) =saturate( src1(I)* alpha + src2(I) *beta + gamma )


[C++] 纯文本查看 复制代码
/*
注意:
进行线性混合时,2张图的大小和类型必须一致
*/
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;

int main(int argc, char** argv) {
	Mat src1,src2, dst;
	src1 = imread("j1.jpg");
	src2 = imread("j2.jpg");
	if (!src1.data || !src2.data) {
		printf("加载图片异常\n");
		return -1;
	}
	double alpha = 0.5;
	//设定权重

	if (src1.rows==src2.rows && src1.cols==src2.cols && src1.type()==src2.type())
		//判断2张图的大小和类型是不是一致
	{
		addWeighted(src1, alpha, src2, (1.0 - alpha),0.0,dst);
		//调用混合函数
		//add(src1, src2, dst, Mat());
		//这个函数也是可以混合 但是效果很差
		//multiply(src1, src2, dst, 1.0);
		//这个是图像相乘的结果
		
	}
	else {
	
		cout << "2张图的大小或者类型不一致,程序退出!";
		return -1;
	}

	namedWindow("j1", CV_WINDOW_AUTOSIZE);
	imshow("j1", src1);
	namedWindow("j2", CV_WINDOW_AUTOSIZE);
	imshow("j2", src2);	
	namedWindow("最终效果图", CV_WINDOW_AUTOSIZE);
	imshow("最终效果图", dst);


	waitKey(0);
	return 0;
}


4444.jpg





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|编程站点 ( 冀ICP备2023028127号-2 )|友链申请|

GMT+8, 2025-8-23 03:09 , Processed in 0.098886 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表