首页 > 其他分享 >基于 OpenCV 的图像融合

基于 OpenCV 的图像融合

时间:2024-11-14 12:49:14浏览次数:3  
标签:bg fg cv2 融合 jpg OpenCV 图像 blend

概述

图像融合是一种常见的图像处理技术,通过将两张或多张图像按一定比例混合,生成一张新的图像。本文将介绍如何使用 OpenCV 实现图像融合,具体包括读取图像、调整图像大小、图像融合以及保存和显示结果图像。我们将通过一个具体的示例来展示这一过程。

准备工作

在开始之前,确保你已经安装了 OpenCV 库。如果没有安装,可以使用以下命令进行安装:

pip install opencv-python

此外,准备好两张图像文件 a.jpgb.jpg,分别作为背景图像和前景图像。
图片a:
在这里插入图片描述
图片b:
在这里插入图片描述

代码思路和步骤
  1. 读取图像:使用 cv2.imread 函数读取背景图像和前景图像。
  2. 调整图像大小:使用 cv2.resize 函数将两幅图像调整到相同的尺寸,以便进行融合。
  3. 图像融合:使用 cv2.addWeighted 函数将两幅图像按指定的比例进行加权融合。
  4. 保存和显示结果图像:使用 cv2.imwrite 函数保存融合后的图像,并使用 cv2.imshow 函数显示结果图像。
详细代码及注释
import cv2

# 读取图像
bg = cv2.imread('a.jpg', cv2.IMREAD_COLOR)  # 读取背景图像
fg = cv2.imread('b.jpg', cv2.IMREAD_COLOR)  # 读取前景图像

# 检查图像是否成功读取
if bg is None or fg is None:
    print("Error: Image(s) not found!")
    exit()

# 调整图像大小
dim = (691, 393)  # 设定目标尺寸
resized_bg = cv2.resize(bg, dim, interpolation=cv2.INTER_AREA)  # 调整背景图像大小
resized_fg = cv2.resize(fg, dim, interpolation=cv2.INTER_AREA)  # 调整前景图像大小

# 图像融合
blend = cv2.addWeighted(resized_bg, 0.5, resized_fg, 0.8, 0)  # 融合图像,背景图像权重为0.5,前景图像权重为0.8

# 保存融合后的图像
cv2.imwrite('blend.jpg', blend)  # 将融合后的图像保存为 blend.jpg

# 显示融合后的图像
cv2.imshow('blend', blend)  # 在窗口中显示融合后的图像
cv2.waitKey(0)  # 等待用户按键
cv2.destroyAllWindows()  # 关闭所有 OpenCV 窗口
代码详解
1. 导入 OpenCV 库
import cv2
  • import cv2:导入 OpenCV 库,用于图像处理和显示。
2. 读取图像
bg = cv2.imread('a.jpg', cv2.IMREAD_COLOR)  # 读取背景图像
fg = cv2.imread('b.jpg', cv2.IMREAD_COLOR)  # 读取前景图像
  • cv2.imread('a.jpg', cv2.IMREAD_COLOR):读取背景图像 a.jpg,并以彩色模式加载。
  • cv2.imread('b.jpg', cv2.IMREAD_COLOR):读取前景图像 b.jpg,并以彩色模式加载。
3. 检查图像是否成功读取
if bg is None or fg is None:
    print("Error: Image(s) not found!")
    exit()
  • if bg is None or fg is None:检查图像是否成功读取,如果任一图像未找到,则输出错误信息并退出程序。
4. 调整图像大小
dim = (691, 393)  # 设定目标尺寸
resized_bg = cv2.resize(bg, dim, interpolation=cv2.INTER_AREA)  # 调整背景图像大小
resized_fg = cv2.resize(fg, dim, interpolation=cv2.INTER_AREA)  # 调整前景图像大小
  • dim = (691, 393):设定目标尺寸为 691x393。
  • cv2.resize(bg, dim, interpolation=cv2.INTER_AREA):将背景图像 bg 调整到目标尺寸 dim,插值方法为 INTER_AREA
  • cv2.resize(fg, dim, interpolation=cv2.INTER_AREA):将前景图像 fg 调整到目标尺寸 dim,插值方法为 INTER_AREA
5. 图像融合
blend = cv2.addWeighted(resized_bg, 0.5, resized_fg, 0.8, 0)  # 融合图像,背景图像权重为0.5,前景图像权重为0.8
  • cv2.addWeighted(resized_bg, 0.5, resized_fg, 0.8, 0):将调整后的背景图像 resized_bg 和前景图像 resized_fg 进行加权融合,背景图像的权重为 0.5,前景图像的权重为 0.8,偏移量为 0。
6. 保存和显示结果图像
cv2.imwrite('blend.jpg', blend)  # 将融合后的图像保存为 blend.jpg
cv2.imshow('blend', blend)  # 在窗口中显示融合后的图像
cv2.waitKey(0)  # 等待用户按键
cv2.destroyAllWindows()  # 关闭所有 OpenCV 窗口
  • cv2.imwrite('blend.jpg', blend):将融合后的图像 blend 保存为 blend.jpg
  • cv2.imshow('blend', blend):在窗口中显示融合后的图像 blend
  • cv2.waitKey(0):等待用户按键,按任意键继续执行。
  • cv2.destroyAllWindows():关闭所有 OpenCV 窗口。
运行效果展示

假设我们有以下两张图像:

  • 背景图像 a.jpg
    在这里插入图片描述

  • 前景图像 b.jpg
    在这里插入图片描述

运行上述代码后,生成的融合图像 blend.jpg 如下所示:

  • 融合图像 blend.jpg
    在这里插入图片描述
总结

本文详细介绍了如何使用 OpenCV 实现图像融合,包括读取图像、调整图像大小、图像融合以及保存和显示结果图像。通过理解这些基本概念和技术,你可以更加灵活地在图像处理和创意设计中应用 OpenCV。

标签:bg,fg,cv2,融合,jpg,OpenCV,图像,blend
From: https://blog.csdn.net/qq_23488347/article/details/143744998

相关文章

  • OpenCV补充
    图像的基本表示方法1.二值图像二值图像是指仅包含黑色和白色两种颜色的图像 2.1灰色图像灰度图像有256个灰度级,用数值区间[0,255]来表示,其中255表示为纯白色,0表示为纯黑色256个灰度级的数值恰好可以用一个字节(8位二进制值)来表示   由于OpenCV没有二值图像这种......
  • 京东零售广告创意:基于人类反馈的可信赖图像生成
    作者:京东零售冯伟   ECCV2024:TowardsReliableAdvertisingImageGenerationUsingHumanFeedback链接:https://arxiv.org/abs/2408.00418摘要:在电商领域,吸引顾客注意力的广告图片至关重要。尽管生成模型可以自动生成图像,但它们往往会产生不符合广告标准的图片,可能......
  • 什么是数字图像?
    点赞+关注+收藏=学会了什么是数字图像?弄懂数字图像的概念对学习计算机视觉很有帮助。那么,什么是数字图像?字面意思,数字图像就是有数字组成图像。通常由像素(Pixel)组成,每个像素包含颜色或亮度信息。数字图像的格式包括位图和矢量图两种主要类型:位图图像(Bitmap/RasterIm......
  • 数据采集与融合实验四
    码云仓库......
  • TensorFlow\Keras实战100例——GAN生成图像
     一.原理说明GAN包括两个主要部分:生成器(Generator)鉴别器(Discriminator)。生成器负责创建新颖的图像,而鉴别器负责了解生成的图像有多好。我们要为GAN图像生成构建的整个架构如下图所示。二.数据说明MINST数据集是机器学习领域一个经典的数据集,其中包括70000个样本,包......
  • TensorFlow\Keras实战100例——变分自编码器生成图像
    一.原理说明变分自编码器是自编码器的改进版本,自编码器是一种无监督学习,但它无法产生新的内容,变分自编码器对其潜在空间进行拓展,使其满足正态分布,情况就大不一样了。自编码器是通过对输入X进行编码后得到一个低维的向量z,然后根据这个向量还原出输入X。通过对比X与X̃的误差,......
  • 项目实战:Qt+OpenCV透视变换工具v1.1.0(支持打开图片、输出棋盘角点、调整偏移点、导出
    需求  1.打开图片;  2.矫正识别角点;  3.四点对应偏移距离;  4.支持设置棋盘格的行列角点数;  5.导出结果图片; 背景  深入研究图像拼接细分支算法,产出的效果查看工具,验证算法单步思路。 相关博客  《项目实战:Qt+OpenCV透视变换工具v1.1.0(支持打开图......
  • 4k医用 ISP图像处理板,完美收工
     半年的磨练,多少个日日夜夜的煎熬,终于4k医用图像ISP处理板小批量生产成功,终于发货了。先看完整板子长啥样。是的,消失这么久,我就是在折腾它。第一次做硬件,还是中高端的MPSOC板子不可能顺利,板载4kHDMI,DP链路,以及SATA等高速接口。其实我觉得已经是很幸运了,第二次打板就稳......
  • 【自动驾驶-感知】CenterNet与CenterFusion融合目标检测的目标检测模型实战代码-基于P
    【自动驾驶-感知】CenterNet与CenterFusion融合目标检测的目标检测模型实战代码一.CenterNet目标检测模型1.中心点热力图2.物体尺寸回归3.分类任务4.损失函数二、融合目标检测CenterFusion算法原理三.实现案例与代码数据集与实验环境数据预处理与增强模型定义......
  • (教程)如何在 SVG 中嵌入 base64 图像
    创建SVG文件时,您可以通过多种方式嵌入图像,包括本地图像、外部URL和使用base64图像。本教程介绍如何嵌入base64图像以及为什么要这样做。为什么要将图像嵌入为base64?将图像嵌入为base64内容将减少所需的请求数,因为图像现在是SVG文件的一部分。但是,base64内容将......