OpenCV_5 图像运算

前言

本节学习了图像运算的相关知识,且本节所做操作都必须在两张图片尺寸大小相同时才能进行。


一、图像运算

1.图像相加

图像相加本质上是矩阵的加法运算,因此两张图的尺寸必须相等。

add(A,B)
参数:A与B是两张图片
返回值:相加后的图片

代码案例:

import cv2
import numpy as np 
cat = cv2.imread('./picture/cat.jpg')
print(cat.shape)

img = np.ones((450, 450, 3), np.uint8) * 100
cv2.imshow('cat', cat)

result = cv2.add(cat, img)
cv2.imshow('result', result)
cv2.waitKey(0)

结果展示:
图像相加结果展示
图片相加后明显曝光度更高

2.图像减法

subtract(A,B)
含义:A-B
参数:A与B是两张图片
返回值:相减后的图片

代码案例:

import cv2
import numpy as np 
cat = cv2.imread('./picture/cat.jpg')

img = np.ones((450, 450, 3), np.uint8) * 50
cv2.imshow('cat', cat)

result = cv2.subtract(cat, img)
cv2.imshow('result', result)
cv2.waitKey(0)

结果展示:
请添加图片描述
图像相减后明显色彩更加暗淡。

3.图像乘与除

multiply(A, B)
divide(A, B)

与图像加减类似。

4.图像融合

addWeighted()
声明:void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1);
参数:
   src1和src2:图像
   alpha和beta:分别为A与B在融合后的权重
   gamma:生成图像后整体加gamma

代码案例:

import cv2
import numpy as np 
main = cv2.imread('./picture/main.webp')
back = cv2.imread('./picture/back.webp')

print(main.shape)
print(back.shape)

cv2.imshow('main', main)
cv2.imshow('back', back)

result = cv2.addWeighted(main, 0.7, back, 0.3, 0)
cv2.imshow('result', result)
cv2.waitKey(0)

结果展示:
请添加图片描述
请添加图片描述
请添加图片描述


二、图像位运算

1.非

bitwise_not(img)

代码案例:

import cv2
import numpy as np 

img = np.zeros((200, 200), np.uint8)

img[50:150, 50:150] = 255

new_img = cv2.bitwise_not(img)

cv2.imshow('img', img)
cv2.imshow('new_img', new_img)

cv2.waitKey(0)

结果展示:
请添加图片描述

2.与

bitwise_and(img1, img2)

代码案例:

import cv2
import numpy as np 

img1 = np.zeros((200, 200), np.uint8)
img2 = np.zeros((200, 200), np.uint8)

img1[20:120, 20:120] = 255
img2[80:180, 80:180] = 255

new_img = cv2.bitwise_and(img1, img2)

cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('new_img', new_img)

cv2.waitKey(0)

结果展示:
请添加图片描述

3.或与异或

bitwise_or(img1, img2)
bitwise_xor(img1, img2)

代码案例:

import cv2
import numpy as np 

img1 = np.zeros((200, 200), np.uint8)
img2 = np.zeros((200, 200), np.uint8)

img1[20:120, 20:120] = 255
img2[80:180, 80:180] = 255

new_or = cv2.bitwise_or(img1, img2)
new_xor = cv2.bitwise_xor(img1, img2)


cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('new_or', new_or)
cv2.imshow('new_xor', new_xor)
cv2.waitKey(0)

结果展示:
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值