概述
OpenCV的算术与位运算
一、图像的加法运算
import cv2
import numpy as np
bus = cv2.imread("./image/bus.jpg")
# 图的加法运算就是矩阵的加法运算
# 因此,加法运算的两张图必须是相等的
# print(bus.shape)
img = np.ones((1080, 810, 3), np.uint8) * 100
# 合并两张图片
result = cv2.add(bus, img)
cv2.imshow("result", result)
cv2.waitKey(0)
二、图像的减法运算
subtract(A,B)
- A图减去B图
import cv2
import numpy as np
bus = cv2.imread("./image/bus.jpg")
# 图的加法运算就是矩阵的加法运算
# 因此,加法运算的两张图必须是相等的
# print(bus.shape)
img = np.ones((1080, 810, 3), np.uint8) * 100
result = cv2.subtract(bus, img)
cv2.imshow("result", result)
cv2.waitKey(0)
三、图像的乘除法运算
用法与二中加减相类似,注意:位置A,B
- multiply(A,B)
- divide(A, B)
四、图像的融合
- addWeighted(A, alpha, B, bate, gamma)
- alpha和beta是权重:指AB图所对应的占比
- gamma:静态权重
import cv2
import numpy as np
bus = cv2.imread("./image/bus.jpg")
zidane = cv2.imread("./image/zidane.jpg")
# 图的加法运算就是矩阵的加法运算
# 因此,加法运算的两张图必须是相等的
# print(bus.shape)
img = np.ones((1080, 810, 3), np.uint8) * 100
result = cv2.addWeighted(bus, 0.7, zidane, 0.3, 0)
cv2.imshow("result", result)
cv2.waitKey(0)
五、图像的位运算
- 非操作
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("result", img)
cv2.imshow("new_img", new_img)
cv2.waitKey(0)
- 与操作
显示交叉点,共同有颜色部分显示
import cv2
import numpy as np
img1 = np.zeros((200, 200), np.uint8)
img2 = np.zeros((200, 200), np.uint8)
img1[50:150, 50:150] = 255
img2[20:120, 20:120] = 255
# 图像非操作,颜色取反,原本黑变白,原本白变黑
new_img = cv2.bitwise_and(img1, img2)
cv2.imshow("result", img1)
cv2.imshow("new_img1", img2)
cv2.imshow("new_img2", new_img)
cv2.waitKey(0)
- 或操作
有颜色就显示 - 异或操作
图像异或操作,共同有颜色部分取反
import cv2
import numpy as np
img1 = np.zeros((200, 200), np.uint8)
img2 = np.zeros((200, 200), np.uint8)
img1[80:180, 80:180] = 255
img2[20:120, 20:120] = 255
# 图像或操作,有颜色就显示
new_img1 = cv2.bitwise_or(img1, img2)
# 图像异或操作,共同有颜色部分取反
new_img2 = cv2.bitwise_xor(img1, img2)
cv2.imshow("img1", img1)
cv2.imshow("img2", img2)
cv2.imshow("new_img1", new_img1)
cv2.imshow("new_img2", new_img2)
cv2.waitKey(0)
六、图像添加水印
import cv2
import numpy as np
"""
1. 引入一幅图片
2. 要有一个LOGO,需要自己创建
3. 计算图片在什么地方添加,在添加的地方变成黑色
4. 利用add,将logo与图片叠加到一起
"""
# 导入图片
bus = cv2.imread("./image/bus.jpg")
# 创建logo和mask
logo = np.zeros((200, 200, 3), np.uint8) # 输出整个黑色页面3维
mask = np.zeros((200, 200), np.uint8) # 输出黑色页面1维
# 绘制logo(输出对应位置为红,绿,其他位置为黑色)
logo[20:120, 20:120] = [0, 0, 255]
logo[80:180, 80:180] = [0, 255, 0]
# 绘制mask(对应位置输出为白色,其他位置为黑色)
mask[20:120, 20:120] = 255
mask[80:180, 80:180] = 255
# 对mask按位求反(对应位置变为黑色,其他位置转为白色)
m = cv2.bitwise_not(mask)
# 选择bus添加logo的位置,选择位置必须与logo大小一样。
roi = bus[0:200, 0:200]
# 与m进行与操作(三通道必须以下面这种形式):因为m是对应位置为黑,其他位置为白,白是0,与背景与操作变为背景,黑为1,与背景与则变黑,最后,对应位置为黑,其他位置为背景色
tmp = cv2.bitwise_and(roi, roi, mask=m)
# 上面对应位置为黑之后添加之前的红绿,变成了红绿
dst = cv2.add(tmp, logo)
# 将红绿加到原图
bus[0:200, 0:200] = dst
cv2.imshow("dst", dst)
cv2.imshow("bus", bus)
cv2.waitKey(0)
最后
以上就是要减肥书包为你收集整理的opencv基础学习--4.OpenCV的算术与位运算OpenCV的算术与位运算的全部内容,希望文章能够帮你解决opencv基础学习--4.OpenCV的算术与位运算OpenCV的算术与位运算所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复