图像处理OpenCV(3)——OpenCV基本操作之算数操作

文章目录

    • 2.7算数操作
      • 2.7.1图像的加法
      • 2.7.2图像的混合

2.7算数操作

2.7.1图像的加法

可以使用OpenCV的cv.add()函数把两幅图像相加,或者可以简单地通过numpy操作添加两个图像,如res=img1+img2。两个图像应具有相同的大小和类型,或者第二个图像可以是标量值。

注意:

1. OpenCV加法和Numpy加法之间存在差异,OpenCV的加法是饱和操作,而Numpy添加是模运算。

2.相加的图像的大小要保持一致。

参考代码1:

import numpy as np
import cv2 as cv
x= np.uint8([250])
y= np.uint8([10])
print(cv.add(x,y)) # [[255]],250+10=260=>255
print(x+y) # [4]  250+10=260%256=4

这种差别在对两幅图像进行加法时会更加明显。OpenCV的效果会更好一些,所以我们尽量去使用OpenCV中的函数。

参考代码2:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 1.读取图像
img1 = cv.imread('images/holly.jpg')
img2 = cv.imread('images/pool.jpg')

# 2.加法操作
img3 = cv.add(img1,img2)
img4 = img1+img2 #直接相加

# 3.图像显示
fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100)
axes[0].imshow(img3[:,:,::-1])
axes[0].set_title('cv中的加法')
axes[1].imshow(img4[:,:,::-1])
axes[1].set_title('直接相加')
# 设置plt可以显示中文
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
plt.show()

原图:

图像处理OpenCV(3)——OpenCV基本操作之算数操作_第1张图片

图像处理OpenCV(3)——OpenCV基本操作之算数操作_第2张图片

图像处理OpenCV(3)——OpenCV基本操作之算数操作_第3张图片

2.7.2图像的混合

这其实也是加法,但是不同的是两幅图的权重不同,这就会给人一种混合或者透明的感觉。图像混合的计算公式如下:

g(x)=(1-α)f0(x)+αf1(x)

通过修改α的值(0->1),可以实现非常nice的组合。

现在我们把两幅图混合在一起,第一幅图的权重是0.7,第二幅图的权重是0.3,函数cv2.addWeighted()可以按下面的公式对图片进行混合操作。

dst = α*img1 + β * im2+γ

这里的γ取值为0.

参考代码:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 1.读取图像
img1 = cv.imread('images/pool.jpg')
img2 = cv.imread('images/holly.jpg')

# 2.图像混合
img3 = cv.addWeighted(img1,0.7,img2,0.3,0)

# 3.图像显示
plt.figure(figsize=(8,8))
plt.imshow(img3[:,:,::-1])
plt.show()

显示效果:
图像处理OpenCV(3)——OpenCV基本操作之算数操作_第4张图片

你可能感兴趣的:(图像处理+OpenCV,opencv,图像处理,计算机视觉)