c++视觉图像线性混合

图像线性混合

使用 cv::addWeighted() 函数对两幅图像进行线性混合。alpha 和 beta 是两幅图像的权重,它们之和应该等于1。gamma 是一个可选的增益,这里设置为0。

你可以通过调整 alpha 的值来改变混合比例。如果 alpha=0.5,则两幅图像等权重混合,如果 alpha=0.7,则第一幅图像的权重更大。

图像线性混合(Image Blending)通常是通过权重对两幅图像进行加权相加的操作,产生一幅新的图像。这是一个简单的线性混合的示例:

cpp 复制代码
#include <opencv2/opencv.hpp>

int main() {
	// 读取两幅图像
	cv::Mat image1 = cv::imread("11.png");
	cv::Mat image2 = cv::imread("22.png");

	// 检查图像是否成功加载
	if (image1.empty() || image2.empty()) {
		std::cerr << "Error: Could not read the image(s)." << std::endl;
		return -1;
	}

	// 确保两幅图像大小相同
	if (image1.size() != image2.size()) {
		std::cerr << "Error: Image sizes do not match." << std::endl;
		return -1;
	}

	// 定义混合权重
	double alpha = 0.5;  // 第一幅图像的权重
	double beta = 1.0 - alpha;  // 第二幅图像的权重

	// 进行线性混合
	cv::Mat blendedImage;
	cv::addWeighted(image1, alpha, image2, beta, 0.0, blendedImage);

	// 显示原始图像和混合后的图像
	cv::imshow("Image 1", image1);
	cv::imshow("Image 2", image2);
	cv::imshow("Blended Image", blendedImage);

	// 等待按键
	cv::waitKey(0);

	return 0;
}

设置感兴趣区域再矩形线形混合

cpp 复制代码
#include <opencv2/opencv.hpp>

int main() {
    // 读取两幅图像
    cv::Mat image1 = cv::imread("11.png");
    cv::Mat image2 = cv::imread("22.png");

    // 检查图像是否成功加载
    if (image1.empty() || image2.empty()) {
        std::cerr << "Error: Could not read the image(s)." << std::endl;
        return -1;
    }

    // 确保两幅图像大小相同
    if (image1.size() != image2.size()) {
        std::cerr << "Error: Image sizes do not match." << std::endl;
        return -1;
    }

    // 定义感兴趣区域的矩形
    cv::Rect roiRect(100, 50, 150, 100);

    // 定义不同区域的权重
    double alpha1 = 0.8;  // 第一幅图像的权重
    double beta1 = 1.0 - alpha1;  // 第二幅图像的权重

    double alpha2 = 0.3;  // 第一幅图像的权重
    double beta2 = 1.0 - alpha2;  // 第二幅图像的权重

    // 创建两个感兴趣区域
    cv::Mat roi1 = image1(roiRect);
    cv::Mat roi2 = image2(roiRect);

    // 进行线性混合
    cv::Mat blendedROI;
    cv::addWeighted(roi1, alpha1, roi2, beta1, 0.0, blendedROI);

    // 将混合后的ROI放回原图像
    blendedROI.copyTo(image1(roiRect));

    // 显示原始图像和混合后的图像
    cv::imshow("Image 1", image1);
    cv::imshow("Image 2", image2);

    // 等待按键
    cv::waitKey(0);

    return 0;
}
相关推荐
m0_6501082415 小时前
多模态大模型 VS. 图像视频生成模型浅析
人工智能·技术边界与协同·mllm与生成模型·技术浅谈
ai_xiaogui15 小时前
Mac苹果版Krita AI一键安装教程:AIStarter+ComfyUI零基础部署全流程(X86/ARM双架构)
arm开发·人工智能·macos·comfyui·一键部署·ai绘画教程·kritaai
lapiii35816 小时前
[智能体设计模式] 第11章:目标设定与监控模式
人工智能·设计模式
这张生成的图像能检测吗16 小时前
(论文速读)WFF-Net:用于表面缺陷检测的可训练权重特征融合卷积神经网络
人工智能·深度学习·神经网络·缺陷检测·图像分割
shayudiandian16 小时前
RNN与LSTM详解:AI是如何“记住”信息的?
人工智能·rnn·lstm
美人鱼战士爱学习16 小时前
2025 Large language models for intelligent RDF knowledge graph construction
人工智能·语言模型·知识图谱
jz_ddk16 小时前
[算法] 算法PK:LMS与RLS的对比研究
人工智能·神经网络·算法·信号处理·lms·rls·自适应滤波
qinyia16 小时前
使用Wisdom SSH的AI多会话功能进行批量命令执行和跨服务器智能运维
运维·人工智能·ssh
YisquareTech17 小时前
如何实现智能补货?EDI与ERP集成打造零售库存的“自动闭环”
大数据·人工智能·零售·伊士格科技·erp集成
观远数据17 小时前
数据驱动零售新生态:观远BI打造终端经营“透视镜”
大数据·人工智能·信息可视化·数据分析·零售