图像运算通过对图像的像素值进行算术运算或逻辑运算等进行处理,可以将图像进行需求处理,常用的图像加法、图像减法、图像乘法、图像除法以及图像与运算、图像或运算、图像非运算、图像异或运算等通过opencv库中相关函数分别是:add、subtract、multiply、divide、bitwise_and、bitwise_or、bitwise_not、bitwise_xor。
注意1:在进行图像的运算中,像素的取值范围是[0,255],在这个过程中,若相关运算超过了范围,超过255的即取值255,小于0的即取值0。
注意2:在进行图像显示的时候,通过cv2读取的图像是bgr格式,若需要通过matplotlib进行显示,
则需要先进行格式的转化,即将bgr格式转为rgb格式。可通过cv2中的
cv2.cvtColor(image,cv2.COLOR_BGR2RGB)或[:,:,::-1]进行转换。
注意3:在进行图像运算的时候,一定要保证两个图像的分辨率和通道数一致才可以进行计算。
相关代码及案例:
#导库
import cv2
import matplotlib.pyplot as plt
import numpy as np
#读取图像并展示
image1 = plt.imread(r"D:\picture\pic02.jpg",1)
image2 = plt.imread(r"D:\picture\pic03.jpg",1)
img = [image1,image2]
for i in range(2):
plt.subplot(1,2,f'{i+1}')
plt.imshow(img[i])
plt.axis('off')
原图像:
#算术运算、逻辑运算
add = cv2.add(image1,image2) #加
sub = cv2.subtract(image2,image1) #减
cheng=cv2.multiply(image1,image2) #乘
chu=cv2.divide(image1,image2) #除法可实现目标的位置判断
yu=cv2.bitwise_and(image1,image2) #与
huo=cv2.bitwise_or(image1,image2) #或
yihuo=cv2.bitwise_xor(image1,image2) #异或
fei=cv2.bitwise_not(image1) #非
#通过matplitlib显示图形需要将图像格式从bgr转为rgb
add1 = add[:,:,::-1]
sub1 = sub[:,:,::-1]
cheng1 = cheng[:,:,::-1]
chu1 = chu[:,:,::-1]
yu1 = yu[:,:,::-1]
huo1 = huo[:,:,::-1]
yihuo1 = yihuo[:,:,::-1]
fei1 = fei[:,:,::-1]
pp = [add1,sub1,cheng1,chu1,yu1,huo1,yihuo1,fei1]
ppp = ['add1','sub1','cheng1','chu1','yu1','huo1','yihuo1','fei1']
for i in range(8):
plt.subplot(2,4,f'{i+1}')
plt.imshow(pp[i])
plt.title(ppp[i])
plt.axis('off')
plt.show()
经过运算之后的图像:
本篇主要讲述了图像运算的相关方法,希望能给你带来帮助。