教程2_图像的合并及融合

1、图像加法

您可以通过OpenCV函数 cv.add() 或仅通过 numpy 操作 res = img1 + img2 添加两个图像。两个图像应具有相同的深度和类型,或者第二个图像可以只是一个标量值。

注意: OpenCV加法和Numpy加法之间有区别。OpenCV加法是饱和运算,而Numpy加法是模运算。

例如,考虑以下示例:

复制代码
>>> x = np.uint8([250])
>>> y = np.uint8([10])
>>> print( cv.add(x,y) ) # 250+10 = 260 => 255
[[255]]
>>> print( x+y )          # 250+10 = 260 % 256 = 4
[4]

2、图像融合

这也是图像加法,但是对图像赋予不同的权重,以使其具有融合或透明的感觉。根据以下等式添加图像:

G(x) = (1−α)f0(x)+αf1(x)G(x) = (1−α)f0(x)+αf1(x)

通过从 αα 从 0→10→1 更改,您可以在一个图像到另一个图像之间执行很酷的过渡。

在这里有两个图像,将它们融合在一起。第一幅图像的权重为0.7,第二幅图像的权重为0.3。**cv.addWeighted() **在图像上应用以下公式:

dst = α⋅img1+β⋅img2+γdst = α⋅img1+β⋅img2+γ

在这里,γ 被视为0。

复制代码
import cv2 as cv

img1 = cv.imread('img1.png')
img2 = cv.imread('opencv_logo.png')
dst = cv.addWeighted(img1,0.7,img2,0.3,0)
cv.imshow('dst',dst)
cv.waitKey(0)
cv.destroyAllWindows()

检查以下结果:

3、按位运算

这包括按位 ANDORNOTXOR 操作。下面我们将看到一个例子,如何改变一个图像的特定区域。 我想在图像上方放置OpenCV徽标。如果添加两个图像,它将改变颜色。如果混合它,我将获得透明效果。但我希望它不透明。因此,您可以按如下所示进行按位操作:

python 复制代码
# 导入OpenCV库,并给它一个简短的别名cv  
import cv2 as cv  
  
# 使用cv.imread方法加载两张图片,分别为'4.png'和'opencv_logo.png'  
# 将加载的图片分别存储在变量img1和img2中  
img1 = cv.imread('4.png')  
img2 = cv.imread('opencv_logo.png')  
  
# 获取logo图片(img2)的尺寸信息,即行数、列数和通道数  
# 将这些信息分别存储在变量rows, cols, channels中  
rows,cols,channels = img2.shape  
  
# 创建一个ROI(感兴趣区域),大小为logo图片的尺寸,位置为img1的左上角  
# 这里roi变量实际上是img1的左上角区域的一个视图,没有实际复制数据  
roi = img1[0:rows, 0:cols]  
  
# 将logo图片(img2)转换为灰度图像  
img2gray = cv.cvtColor(img2,cv.COLOR_BGR2GRAY)  
  
# 使用cv.threshold方法对灰度图像进行二值化处理  
# 设定阈值为10,当像素值大于或等于10时,设为255,否则为0  
# 使用cv.THRESH_BINARY作为阈值类型  
# 返回值ret为使用的实际阈值(在此处可能为10),mask为二值化后的掩码图像  
ret, mask = cv.threshold(img2gray, 10, 255, cv.THRESH_BINARY)  
  
# 对掩码图像进行位运算的"非"操作,得到其相反掩码  
# 原本为白色的logo区域在mask_inv中变为黑色,原本为黑色的背景在mask_inv中变为白色  
mask_inv = cv.bitwise_not(mask)  
  
# 使用位运算的"与"操作,将ROI中logo的区域涂黑  
# 因为mask_inv中logo区域是黑色,所以该操作实际上保留了ROI中的原背景  
img1_bg = cv.bitwise_and(roi,roi,mask = mask_inv)  
  
# 使用位运算的"与"操作,仅从logo图像中提取logo区域  
# 因为mask中logo区域是白色,所以该操作提取了logo的实际内容  
img2_fg = cv.bitwise_and(img2,img2,mask = mask)  
  
# 将提取的logo内容添加到之前处理过的ROI背景上  
# 使用cv.add方法将两者合并  
dst = cv.add(img1_bg,img2_fg)  
  
# 将合并后的图像放回原img1的对应位置,即左上角  
img1[0:rows, 0:cols] = dst  
  
# 显示处理后的图像  
cv.imshow('res',img1)  
  
# 等待用户按键,参数0表示无限等待  
cv.waitKey(0)  
  
# 销毁所有OpenCV窗口  
cv.destroyAllWindows()

检查以下结果:

相关推荐
CCPC不拿奖不改名6 分钟前
python基础面试编程题汇总+个人练习(入门+结构+函数+面向对象编程)--需要自取
开发语言·人工智能·python·学习·自然语言处理·面试·职场和发展
我送炭你添花13 分钟前
Pelco KBD300A 模拟器:10.报警联动规则编辑与执行
python·自动化·运维开发
眼眸流转38 分钟前
MCP学习笔记
python·uv·pydantic·mcp
千禧皓月44 分钟前
huggingface-cli下载数据集和模型
python
DREAM依旧1 小时前
本地微调的Ollama模型部署到Dify平台上
人工智能·python
小陈phd1 小时前
langGraph从入门到精通(九)——基于LangGraph构建具备多工具调用与自动化摘要能力的智能 Agent
人工智能·python·langchain
一晌小贪欢1 小时前
Python 对象的“Excel 之旅”:使用 openpyxl 高效读写与封装实战
开发语言·python·excel·表格·openpyxl·python办公·读取表格
【赫兹威客】浩哥1 小时前
【赫兹威客】Python解释器部署教程
python
代码or搬砖1 小时前
Prompt(提示词工程)
人工智能·python·prompt
喵手1 小时前
Python爬虫零基础入门【第二章:网页基础·第3节】接口数据基础:JSON 是什么?分页是什么?
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·接口数据基础·爬虫json