算数操作
学習目標
画像の追加について学ぶ
画像の追加
OpenCV の cv.add() 関数を使用して 2 つの画像を追加できます。
または、単純に numpy 操作で 2 つの画像を追加することもできます。
res= img1 + img2 など。
両方のイメージは同じサイズとタイプでなければなりません。そうでない場合は、2 番目のイメージをスカラー値にすることができます。
注: OpenCV の追加と Numpy の追加には違いがあります。OpenCV の加算は飽和演算ですが、Numpy の加算はモジュラー演算です。
原理
コード
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
# 读取图像
img1 = cv.imread('lena.png')
img2 = cv.imread('lena_saved.png')
# 加法操作
img3 = cv.add(img1, img2) # 使用 OpenCV 的加法
img4 = img1 + img2 # 使用 NumPy 的加法(直接相加)
# 图像显示
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(5, 4), dpi=100)
'''
参数说明:
nrows=1:指定了子图区域的行数为 1,表示在图像区域中只有一行。
ncols=2:指定了子图区域的列数为 2,表示在图像区域中有两列。
figsize=(10, 8):指定图像区域的大小为宽度 10 英寸,高度 8 英寸。这里的单位是英寸。
dpi=100:指定图像区域的分辨率为 100,即每英寸的像素数。
该函数返回两个值:
fig:表示整个图像区域,可以通过这个对象对图像进行整体的设置。
axes:表示一个由实际子图对象组成的 NumPy 数组。可以通过 axes 对象对每个子图进行单独的设置和操作。
这个函数的作用是创建一个包含 1 行、2 列的子图区域,用于显示两个子图。通过 fig 和 axes 可以进一步对整个图像区域和子图进行设置和操作。'''
axes[0].imshow(img3[:, :, ::-1]) # 将 BGR 转换为 RGB 进行显示
axes[0].set_title("cv中的加法")
axes[1].imshow(img4[:, :, ::-1]) # 将 BGR 转换为 RGB 进行显示
axes[1].set_title("直接相加")
plt.show()
cv.imwrite(r'E:\All_in\opencv\img3.png',img3)
発生したエラー
解決
このコードを追加してください
pylab から import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
走行結果の表示
要約する
cv.add() を使用する方が np.add() [直接加算] メソッドよりも優れています