OpenCV入门5——OpenCV的算术与位运算

文章目录

图像的加法运算

python 复制代码
# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('E://pic//4.jpg')

# 图的加法运算就是矩阵的加法运算
# 因此,加法运算的两张图必须是相同的形状

# print(img.shape)
# (600, 480, 3)

img2 = np.ones((600, 480, 3), np.uint8) * 100
cv2.imshow('origin', img)
res = cv2.add(img, img2)
cv2.imshow('result', res)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

图像的减法运算

python 复制代码
# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('E://pic//4.jpg')

# 图的加法运算就是矩阵的加法运算
# 因此,加法运算的两张图必须是相同的形状

# print(img.shape)
# (600, 480, 3)

img2 = np.ones((600, 480, 3), np.uint8) * 100
cv2.imshow('origin', img)
res = cv2.add(img, img2)
cv2.imshow('result', res)

img3 = cv2.subtract(res, img2)
cv2.imshow('origin2', img3)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()
python 复制代码
# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('E://pic//4.jpg')

# 图的加法运算就是矩阵的加法运算
# 因此,加法运算的两张图必须是相同的形状

# print(img.shape)
# (600, 480, 3)

img2 = np.ones((600, 480, 3), np.uint8) * 100
cv2.imshow('origin', img)
res = cv2.add(img, img2)
cv2.imshow('result', res)

img3 = cv2.subtract(res, img2)
cv2.imshow('origin2', img3)

img3 = cv2.subtract(img, img2)
cv2.imshow('origin3', img3)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

可以看出,给一张图做加法运算,它可以变亮一些,做减法运算,可以变暗一些

图像的乘除运算

无非是让图片亮得更快一些和亮得更慢一些

图像的融合

python 复制代码
# -*- coding: utf-8 -*-
import cv2
import numpy as np


cv2.namedWindow('img', cv2.WINDOW_NORMAL)
back = cv2.imread('E://pic//Nurburgring_1920x1080.jpg')
superman = cv2.imread('E://pic//Man_Of_Steel_superman_superhero_____f_1920x1080.jpg')

# 只有两张图片的属性一样才可以融合
# print(back.shape)
# print(superman.shape)
# (1080, 1920, 3)
# (1080, 1920, 3)

res = cv2.addWeighted(superman, 0.7, back, 0.3, 0)

cv2.imshow('img', res)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

OpenCV位运算-非操作

python 复制代码
# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = np.zeros((200, 200), np.uint8)
img[50:150, 50:150] = 255

cv2.imshow('img', img)


key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()
python 复制代码
# -*- coding: utf-8 -*-
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)


key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

OpenCV位操作-与运算

python 复制代码
# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = np.zeros((200, 200), np.uint8)
img2 = np.zeros((200, 200), np.uint8)
img[20:120, 20:120] = 255
img2[80:180, 80:180] = 255

# new_img = cv2.bitwise_not(img)

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


key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()
python 复制代码
# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = np.zeros((200, 200), np.uint8)
img2 = np.zeros((200, 200), np.uint8)
img[20:120, 20:120] = 255
img2[80:180, 80:180] = 255

# new_img = cv2.bitwise_not(img)
new_img = cv2.bitwise_and(img, img2)

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


key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

OpenCV位操作-或与异或

python 复制代码
# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = np.zeros((200, 200), np.uint8)
img2 = np.zeros((200, 200), np.uint8)
img[20:120, 20:120] = 255
img2[80:180, 80:180] = 255

# new_img = cv2.bitwise_not(img)
# new_img = cv2.bitwise_and(img, img2)
new_img = cv2.bitwise_or(img, img2)
new_img2 = cv2.bitwise_xor(img, img2)

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


key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

为图像添加水印

python 复制代码
# -*- coding: utf-8 -*-
import cv2
import numpy as np

#1. 引入一幅图片 
#2. 要有一个LOGO,需要自己创建
#3. 计算图片在什么地方添加,在添加的地方变成黑色
#4. 利用add,将logo 与 图处叠加到一起

cv2.namedWindow('img', cv2.WINDOW_NORMAL)
superman = cv2.imread('E://pic//Man_Of_Steel_superman_superhero_____f_1920x1080.jpg')

# 创建水印
logo = np.zeros((200, 200, 3), np.uint8)
mask = np.zeros((200, 200), np.uint8)

# 绘制水印
logo[20:120, 20:120] = [0, 0, 255]
logo[80:180, 80:180] = [255, 255, 0]

mask[20:120, 20:120] = 255
mask[80:180, 80:180] = 255

# 对mask按位取反
m = cv2.bitwise_not(mask)

# 选择添加logo的位置
roi = superman[0:200, 0: 200]

# 和m进行按位与操作
# 因为roi是三通道,而m是单通道,不能直接相与
tmp = cv2.bitwise_and(roi, roi, mask=m)

dst = cv2.add(tmp, logo)

superman[0:200, 0:200] = dst

cv2.imshow('dst', dst)
cv2.imshow('tmp', tmp)
cv2.imshow('mask', mask)
cv2.imshow('logo', logo)
cv2.imshow('img', superman)
cv2.imshow('m', m)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

相关推荐
墨染天姬2 小时前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
AI成长日志2 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
2501_948114242 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠3 小时前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
黎阳之光3 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
小超同学你好3 小时前
面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注
人工智能·语言模型
智星云算力3 小时前
本地GPU与租用GPU混合部署:混合算力架构搭建指南
人工智能·架构·gpu算力·智星云·gpu租用
jinanwuhuaguo3 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin
xiaozhazha_3 小时前
效率提升80%:2026年AI CRM与ERP深度集成的架构设计与实现
人工智能
枫叶林FYL3 小时前
【自然语言处理 NLP】7.2.2 安全性评估与Constitutional AI
人工智能·自然语言处理