我是靠谱客的博主 要减肥书包,最近开发中收集的这篇文章主要介绍opencv基础学习--4.OpenCV的算术与位运算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)

最后

以上就是要减肥书包为你收集整理的opencv基础学习--4.OpenCV的算术与位运算OpenCV的算术与位运算的全部内容,希望文章能够帮你解决opencv基础学习--4.OpenCV的算术与位运算OpenCV的算术与位运算所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部