opencv基础学习--4.OpenCV的算术与位运算

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值