图像的算数运算是对图像进行加减运算,而图像的逻辑运算是对图像进行与、或、非、异或等逻辑运算。通过算术运算可以让图像来达到图像增强的效果;通过逻辑运算对图像进行分割、图像增强、图像识别、图像复原等操作

1、图像的算术运算

图像的普通加运算

图像的加运算可以使用“+”或者OpenCV自带函数cv.add()来实现对图像的加运算。进行算术运算与逻辑运算的图像的分辨率和通道数需要一样。那么“+”和cv.add()有区别吗?答案是肯定的。先上代码看“+”与cv.add()的效果有什么不同:

'''+对两个图像进行操作时,像素大于255取余数,所以相加后的图形会变暗add对两个图形进行操作时,像素大于255时保持255,所以相加后的图像会变亮
'''import cv2 as cv
img = cv.imread('zzf1.jpg')
img = cv.resize(img, (600,800))
cv.imshow('zzf', img)
cv.waitKey(0)
cv.destroyAllWindows()# 用+对图像相加
img1 = img + img
cv. imshow('+', img1)# 用add对图像相加
img2 = cv.add(img, img)
cv.imshow('add', img2)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下图:

大家可以看的出“+”的加运算让图像变暗了,而cv.add()的加运算让图像变得更亮了。这是为什么呢?主要是当两个图像相加时,灰度值会出现大于255的情况。对于“+”大于255是取余数,比如156+120结果就不是276而是21,;而cv.add()当相加灰度值大于255,默认为255,即白色,所以达到了图像增强变亮的效果。

图像的加权加运算

图像的加运算是当两个不同图像进行相加时,两个图片灰度值所占比重不同,对两个图片进行权值分配。使得想要更突显的部分权值更大,需要淡化的权值略小。主要通过cv.addWeighted()对图像进行操作,函数具体参数介绍见OpenCV-Python计算机视觉函数_一只会飞的猪️的博客-CSDN博客

上代码:

import cv2 as cv# 读取图片1
img = cv.imread('zzf1.jpg')
img1 = cv.resize(img, (400, 600))
cv.imshow('reba', img1)# 读取图片2
img2 = cv.imread('zzf2.jpg')
img3 = cv.resize(img2, (400, 600))
cv.imshow('dilireba', img3)# 对图像加权相加
img4 = cv.addWeighted(img1, 0.6, img3, 0.4, 0)
cv.imshow('addweighted', img4)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下图:

可以看得出来,两个图像进行不同权值的相加后产生的效果很明显。一定要注意:通过cv.resize()将两个图像的大小修改成一致,才能进行运算。

图像的减运算

当求两张图像差异的时候就会用到图像的减运算,减法运算通过cv.subtract()进行减法操作,函数的具体参数见OpenCV-Python计算机视觉函数_一只会飞的猪️的博客-CSDN博客。老规矩,上代码:

import cv2 as cv# 读取图片1
img = cv.imread('R-C.jpg')
img1 = cv.resize(img, (600 , 400))
cv.imshow('reba', img1)# 读取图片2
img2 = cv.imread('reba.jpg')
img3 = cv.resize(img2, (600, 400))
cv.imshow('dilireba', img3)# 对两图像相减
img4 = cv.subtract(img1, img3)
cv.imshow('subtract', img4)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下图:

其实我个人感觉图像的减运算并没有什么用,而且影响美观,减法做出来的图片有点吓人。我思考了一下,应该是选取的图片差异不大导致的相减未能显示出太多的差异。不过能明显看出来第二张图上的花被很好的显示在第三张图片上,验证了确实能显示图片差异的功能。

2、图像的逻辑运算

图像逻辑运算效果

图像的逻辑运算主要包括逻辑与、逻辑或、逻辑非、逻辑异或等相关逻辑运算。分别通过OpenCV内置函数cv.bitwise_and()、cv.bitwise_or()、cv.bitwise_not()、cv.bitwise_xor()来进行运算,具体用法看我这个专栏的开篇之作函数介绍。一一举例,代码如下:

import cv2 as cv# 读取图片1
img = cv.imread('didi.jpg')
img1 = cv.resize(img, (600 , 400))
cv.imshow('img1', img1)# 读取图片2
img2 = cv.imread('baba.jpg')
img3 = cv.resize(img2, (600, 400))
cv.imshow('img2', img3)# 逻辑与运算
img4 = cv.bitwise_and(img1,img3)
cv.imshow('and', img4)# 逻辑或运算
img5 = cv.bitwise_or(img1, img3)
cv.imshow('or', img5)# 逻辑非运算
img5 = cv.bitwise_not(img1)
cv.imshow('not', img5)# 逻辑异或运算
img6 = cv.bitwise_xor(img1,img3)
cv.imshow('xor', img4)cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下:

通过对比可以看出各个逻辑变换带来的不同效果。

图片逻辑运算应用

与运算可以用来截取一张图的某个区域,应用代码如下:

import cv2 as cv
import numpy as np# 读取图片
img = cv.imread('pangdi.jpg')
cv.imshow('reba', img)# 生成掩膜图像
mask = np.zeros(img.shape, dtype=np.uint8)
mask[200:400, 400:600] = 255
cv.imshow('mask', mask)# 进行逻辑与运算,截取重要部分
img1 = cv.bitwise_and(img, mask)
cv.imshow('bitwise_and', img1)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下:

黑色的像素值为0不管与什么进行逻辑与结果都是0,即黑色,通过设置白色窗口的位置大小获取目标区域。但必须注意截取图片的mask需要与被截取图像分辨率、通道数一致,

逻辑异或可以用来对图像加密和解密。

加密:图片与密钥异或运算

解密:加密图像与密钥异或运算

代码如下:

import cv2 as cv
import numpy as npimg = cv.imread('zzf3.jpg')
img = cv.resize(img, (800, 500))
cv.imshow('yuantu', img)  # 显示原图
key = np.random.randint(0, 256, size=img.shape , dtype=np.uint8)
cv.imshow('key', key)  # 显示密钥# 对图像进行加密
img1 = cv.bitwise_xor(img, key)  #显示加密后图形
cv.imshow('encryption', img1)# 对加密图像解密
img2 = cv.bitwise_xor(img1, key)
cv.imshow('decryption', img2)  # 显示解密后图形
cv.waitKey(0)
cv.destroyAllWindows()

运行结果:

大家可以看到,确实实现了图像的加密与解密。各个逻辑运算都有自己的用途,大家感兴趣可以自己搜索了解一下,我这里只是给大家抛砖引玉。

总结:这一篇主要讲了图像的算术运算与逻辑运算的运算方法和一些简单的作用介绍。再强调一下,图像运算的时候一定要保证两个图形的分辨率和通道数一致才能进行运算。一些函数的参数及用法不知道的可以点击OpenCV-Python计算机视觉函数_一只会飞的猪️的博客-CSDN博客去了解一下,这个是 笔者总结的一些OpenCV库,后续还会不断更新。特别感谢俗人嗷的博客_CSDN博客-领域博主提供了珍藏多年的张子枫图片。

OpenCV计算机视觉(二) —— 图像的算数运算与逻辑运算相关推荐

  1. OpenCV:03图像的算数运算

    文章目录 掩膜 图像的算数运算 加法运算 利用掩膜遮盖相加结果 减法运算 乘法运算 除法运算 图片的融合 OpenCV的逻辑运算(位运算) 与运算`&` 花图像与十字掩膜做`与运算` 或运算` ...

  2. 算数运算和逻辑运算的区别

    看了很多文章都没讲明白什么是算数运算和逻辑运算,这里我就结合一下自己看的很多文章和上课中学到的详细的讲解一下算数运算和逻辑运算. tips:以下都是以二进制为准的. 1. 算数运算 ​ 其实我们平常十 ...

  3. [python opencv 计算机视觉零基础到实战] 七、逻辑运算与应用

    一.学习目标 了解opencv中图像的逻辑运算 了解opencv中逻辑运算的应用 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...

  4. 小白入门计算机视觉(二) : 图像基本处理----灰度图和二值化

    文章目录 解剖图像 图像处理基本原理 RGB模型 灰度 二值化 图像失真问题 从本节开始,我就要正式踏上小白的计算机视觉探索之路,先从图像基础学习吧 解剖图像 要学会图像处理首先就得知道图像的结构,平 ...

  5. Opencv计算机视觉入门——图像的处理(一)

    接上次的笔记,开始图像操作的第二段学习旅程~~~ 图像的处理(一) 图像阈值 拿到一张图像,图像是由众多像素点组成的,我们要对每一个像素点的值进行判断,用像素点的值与阈值进行比较,对于大于或小于阈值分 ...

  6. OpenCV计算机视觉(三) —— 图像的几何变换

    图像的几何变换主要包括图像的翻转.平移.旋转.透视以及一些镜像变换.主要是对图像的大小.位置.坐标进行操作,来实现图片的几何变换. 思维导图如下: 下面将针对这五个方面进行一一讲解. 图像的翻转 主要 ...

  7. 算数运算,逻辑运算,算术右移,逻辑右移

    比如一个有符号位的8位二进制数11001101,逻辑右移就不管符号位,如果移一位就变成01100110.算术右移要管符号位,右移一位变成10100110. 逻辑左移=算数左移,右边统一添0 逻辑右移, ...

  8. [python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充

    一.学习目标 了解什么是ROI 了解floodFill的使用方法 如有错误欢迎指出~ 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[pyth ...

  9. python opencv 图像切割_【OpenCV+Python】图像的基本操作与算术运算

    图像的基本操作 在上个教程中,我们介绍了使用鼠标画笔的功能.本次教程,我们将要谈及OpenCV图像处理的基本操作. 本次教程的所有操作基本上都和Numpy相关,而不是与OpenCV相关.要使用Open ...

  10. [python opencv 计算机视觉零基础到实战] 六、图像运算

    一.学习目标 了解opencv中图像运算的方法 了解opencv中图像运算的运用 如有错误欢迎指出~ 二.了解OpenCV中图像运算的运用 目录 [python opencv 计算机视觉零基础到实战] ...

最新文章

  1. 大数据处理系列之(一)Java线程池使用
  2. sata接口测试软件,方便用户,技嘉放出6系列主板SATA接口检测软件
  3. 基于TCP协议的网络程序(基础学习)
  4. 第二章:Improving On User Commands--22.显示不同时区的时间
  5. qt webkit 本地html5,Qt Webkit HTML5 Score
  6. DIV+CSS定义及优势
  7. 离散数学课后习题答案 左孝凌版
  8. JS获取当前时间的日周月年的开始结束时间
  9. 插屏广告怎么玩?这些优化要点请get~
  10. [POJ1637]SightseeingTour
  11. 【1】机器人手眼标定:固定向上相机
  12. 算法练习(7) —— 动态规划 Strange Printer
  13. Windows批处理文件中相当于NEQ、LSS、GTR等的符号
  14. gets(), fgets(), scanf()总结
  15. 详细介绍 Node.js
  16. 用PS怎样处理一张文件照片,打印出来呈灰色不够清晰的纸张,使文字更黑,纸张更白
  17. 自动点击网页alert()弹出框
  18. 华为 荣耀 6x android哪个版本,荣耀畅玩6X有几个版本 荣耀畅玩6X各版本区别对比...
  19. 3D打印机开源、免费分层软件介绍
  20. 项目调研 | Loopring研究报告

热门文章

  1. 通过UEFI引导模式修改RAID卡jbod配置
  2. 工业级交换机级联介绍
  3. Android Room 官方指南
  4. vim如何修改只读文件
  5. 微软Excel 2007 框里打钩/打钩的方框选择
  6. 数字化时代的数据安全与治理
  7. java后端必会【基础知识点】
  8. 使用Horner法则计算多项式的值
  9. 2021中国开源优秀人物榜出炉!
  10. 四、音频如何从USB输入输出