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

文章目录

  • 图像的加法运算
  • 图像的减法运算
  • 图像的乘除运算
  • 图像的融合
  • OpenCV位运算-非操作
  • OpenCV位操作-与运算
  • OpenCV位操作-或与异或
  • 为图像添加水印

在这里插入图片描述

图像的加法运算

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = 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()

在这里插入图片描述

图像的减法运算

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = 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()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = 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()

可以看出,给一张图做加法运算,它可以变亮一些,做减法运算,可以变暗一些
在这里插入图片描述

图像的乘除运算

无非是让图片亮得更快一些和亮得更慢一些
在这里插入图片描述

图像的融合

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npcv2.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位运算-非操作

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((200, 200), np.uint8)
img[50:150, 50:150] = 255cv2.imshow('img', img)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((200, 200), np.uint8)
img[50:150, 50:150] = 255new_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位操作-与运算

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = 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()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = 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位操作-或与异或

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = 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()

在这里插入图片描述

为图像添加水印

# -*- 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] = dstcv2.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()

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/186013.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

监控直流防雷浪涌保护器综合方案

监控系统是一种广泛应用于安防、交通、工业、军事等领域的信息系统,它通过摄像机、传输线路、监控中心等设备,实现对目标区域的实时监视和控制。然而,监控系统也面临着雷电的威胁,雷电可能通过直击雷、感应雷、雷电波侵入等途径&a…

苹果电脑杀毒软件cleanmymac2024

苹果电脑怎么杀毒?这个问题自从苹果电脑变得越来越普及,苹果电脑的安全性问题也逐渐成为我们关注的焦点。虽然苹果电脑的安全性相对较高,但仍然存在着一些潜在的威胁,比如流氓软件窥探隐私和恶意软件等。那么,苹果电脑…

系列三、GC垃圾回收【总体概览】

一、GC垃圾回收【总体概览】 JVM进行GC时,并非每次都对上面的三个内存区域(新生区、养老区、元空间/永久代)一起回收,大部分回收的是新生区里边的垃圾,因此GC按照回收的区域又分为了两种类型,一种是发生在新…

怎么去掉邮件内容中的回车符

上图是Outlook 截图,可见1指向的总有回车符; 故障原因: 不小心误按了箭头4这个选项; 解决方法: 点击2箭头确保tab展开; 点击3以找到箭头4. 取消勾选或者多次点击,即可解决。

React实战演练项⽬一需求分析及vite_react搭建项目

React实战演练项⽬一需求分析及项目初始化 需求分析 刚学完React,开始找项目进行上手练习! 页面组件拆分: 头部:导航tab、搜索框、登录注册 中间:分类导航、轮播图、新人福利、高单价产品导航 课程分类列表、底部内容、登陆提…

这么好看的马面裙 ,女儿穿上不要太美了

红色小翻领,上身米白色金貂绒面料精细顺滑非常有质感 另外还有全手工定制的盘口裙子用的是仿宋代宋锦的织金面料 制作工艺非常复杂很重工的一件衣服 出门保证会被夸!!

comfyui指北-1

https://colab.research.google.com/github/tieai/SDXL-ComfyUI-Colab/blob/main/SDXL_OneClick_ComfyUI.ipynb#scrollToSaAJk33ppFw1https://colab.research.google.com/github/tieai/SDXL-ComfyUI-Colab/blob/main/SDXL_OneClick_ComfyUI.ipynb#scrollToSaAJk33ppFw1 可以用上…

Python大数据学习问题整理汇总

day01 分区表与分桶表的区别 在这里插入代码片day02 数据仓分层/与本质 数据仓库(OLAP)的本质叫联机分析处理, 一般针对某些主题的历史数据进行分析 主要面向分析,支持管理决策。源数据层(ODS): 此层数据无任何更改,直接沿用外围…

【linux】查看CPU的使用率

命令1:top top 总体系统信息 uptime:系统的运行时间和平均负载。tasks:当前运行的进程和线程数目。CPU:总体 CPU 使用率和各个核心的使用情况。内存(Memory):总体内存使用情况、可用内存和缓存…

聊聊ThreadLocal(二)

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 大部分面试官喜欢问Thr…

U盘不能访问不一定是坏了,可能还有其他原因!U盘无法访问修复详解

当你将USB驱动器连接到计算机时,系统会将其识别为可移动驱动器,并启动其文件管理过程。 然而,用户现在注意到,即使可以检测到他们的USB驱动器,也无法访问它们。 如果幸运的话,拔下插头就能解决问题,但如果不是,请继续阅读以了解更多故障排除选项。 USB闪存驱动器是便…

windows c++开发

一 安装 离线MSDN MSDN:microsoft developer network ,微软向开发人员提供的一套帮助系统。 运行vs 2017 -》运行 vs studio installer ->点击修改-》单个组件-》代码工具-》help viewer-> 安装完后,启动vs 在“帮助”菜单,“设置帮助首选项…