1.图像算术运算

参数含义:

  • src1:第一张图像
  • src2:第二张图像
  • dst:destination,目标图像,需要提前分配空间,可省略
  • mask:掩膜
  • scale:缩放比,常量
  • dtype:数据类型,默认等于-1
cv2.add(src1,src2,dst,mask,dtype) cv2.subtract(src1,src2,dst,mask,dtype) cv2.multiply(src1,src2,dst,scale,dtype) cv2.divide(src1,src2,dst,scale,dtype)
dst = src1 + src2 dst = src1 - src2 dst = scale * src1 * src2 dst = scale * src1 / src2

实例演示:

 import cv2
import numpy as np
from matplotlib import pyplot as plt x = np.uint8([250])
y = np.uint8([10])
print(cv2.add(x, y)) #饱和运算
print(x + y) #求余运算(x+y)%255 img1 = cv2.imread('a.jpg') # 图片1
img2 = cv2.imread('b.jpg') # 图片2
add = cv2.add(img1, img2) # 两个图像相加
subtract = cv2.subtract(img1, img2) # 两个图像相减
multiply = cv2.multiply(img1, img2) # 两个图像相乘
divide = cv2.divide(img1, img2) # 两个图像相除 plt.subplot(231), plt.imshow(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB), 'gray'), plt.title('img1')
plt.subplot(232), plt.imshow(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB), 'gray'), plt.title('img2')
plt.subplot(233), plt.imshow(cv2.cvtColor(add, cv2.COLOR_BGR2RGB), 'gray'), plt.title('add')
plt.subplot(234), plt.imshow(cv2.cvtColor(subtract, cv2.COLOR_BGR2RGB), 'gray'), plt.title('subtract')
plt.subplot(235), plt.imshow(cv2.cvtColor(multiply, cv2.COLOR_BGR2RGB), 'gray'), plt.title('multiply')
plt.subplot(236), plt.imshow(cv2.cvtColor(divide, cv2.COLOR_BGR2RGB), 'gray'), plt.title('divide')
plt.show()

2.图像混合(线性加法)

这也是加法,不同的是两幅图像的权重不同,这会给人一种混合或者透明的感觉。图像混合的计算公式如下:

g(x) = (1−α)f0 (x)+αf1 (x)
通过修改α的值(0-->1),可以实现很酷的混合。
例:将两幅图像混合,第一幅权重为0.7.第二幅权重为0.3。函数cv2.addWeighed()可以按下面的公式对图片进行混合。
dst = α·img1 + β·img2+γ
这里γ的取值为0

 import cv2
import numpy as np
img1=cv2.imread('45.jpg')
img2=cv2.imread('messigray.png') dst = cv2.addWeighted(img1,0.7,img2,0.3,0) cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.按位运算

这里包括按位操作有:AND,OR,NOT,XOR等,当我们提取图像的一部分,选择非矩形ROI时,会很有用。下面进行如何改变一幅图的特定区域。

(1)cv2.bitwise_and(src1,src2,dst,mask)

输出两个图像的交集:dst = src1 & src2

(2)cv2.bitwise_or(src1,src2,dst,mask)

输出两个图像的并集:dst = src1 | src2

(3)cv2.bitwise_not(src,dst,mask)

输出图像的非:dst = - src

(4)cv2.bitwise_xor(src1,src2,dst,mask)

输出两个图像的异或:dst = src1 ^ src2

 import cv2
import numpy as np
from matplotlib import pyplot as plt img1 = cv2.imread('1.jpg')[0:375,0:500] # 图片1
img2 = cv2.imread('2.jpg') # 图片2
band = cv2.bitwise_and(img1, img2) # 两个图像求交
bor = cv2.bitwise_or(img1, img2) # 两个图像求并
bnot = cv2.bitwise_not(img1) # 图像求非
bxor = cv2.bitwise_xor(img1, img2) # 两个图像求异或 title = ['img1', 'img2', 'and', 'or', 'not', 'xor']
images = [img1, img2, band, bor, bnot, bxor]
for i in range(6):
plt.subplot(2, 3, i+1)
plt.imshow(cv2.cvtColor(images[i], cv2.COLOR_BGR2RGB), 'gray'), plt.title(title[i])
plt.show()

opencv2——图像上的算术运算4的更多相关文章

  1. OpenCV学习笔记(4)——图像上的算术运算

    学习图像上的算术运算,加法,减法,位运算等 1.图像加法 使用cv2.add()将两幅图像进行加法运算,也可以用numpy运算,直接img+img1.两幅图像的大小和类型必须一致,或者第二个图像可以是 ...

  2. OpenCV-Python 图像上的算术运算 | 十一

    目标 学习图像的几种算术运算,例如加法,减法,按位运算等. 您将学习以下功能:cv.add,cv.addWeighted等. 图像加法 您可以通过OpenCV函数cv.add()或仅通过numpy操作 ...

  3. opencv入门系列教学(六)图像上的算术运算(加法、融合、按位运算)

    0.序言 这一篇博客我们将学习图像的几种算术运算,例如加法,减法,按位运算等. 1.图像加法 我们可以通过OpenCV函数 cv.add() 或仅通过numpy操作 res=img1+img2 res ...

  4. Opencv笔记(八)——图像上的算数运算

    学习目标: 学习图像上的算术运算,加法,减法,位运算等. 学习函数cv2.add(),cv2.addWeighted() 等. 一.图像的加法 你可以使用函数 cv2.add() 将两幅图像进行加法运 ...

  5. OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)

    在OpenCV2:图像的几何变换,平移.镜像.缩放.旋转(1)主要介绍了图像变换中的向前映射.向后映射.处理变换过程中浮点坐标像素值的插值算法,并且基于OpenCV2实现了两个简单的几何变换:平移和镜 ...

  6. OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)

    图像的几何变换是在不改变图像内容的前提下对图像像素的进行空间几何变换,主要包括了图像的平移变换.镜像变换.缩放和旋转等.本文首先介绍了图像几何变换的一些基本概念,然后再OpenCV2下实现了图像的平移 ...

  7. OpenCV之响应鼠标(四):在图像上绘制出矩形并标出起点的坐标

    涉及到两方面的内容:1. 用鼠标画出矩形.2.在图像上绘制出点的坐标 用鼠标绘制矩形,涉及到鼠标的操作,opencv中有鼠标事件的介绍.需要用到两个函数:回调函数CvMouseCallback和注册回 ...

  8. c# PictureBox 的图像上使用鼠标画矩形框

    C# 中在图像上画框,通过鼠标来实现主要有四个消息响应函数MouseDown, MouseMove, MouseUp, Paint重绘函数实现.当鼠标键按下时开始画框,鼠标键抬起时画框结束. Poin ...

  9. 在DirectShow的视频图像上叠加线条和文字

    在DirectShow的视频图像上叠加线条和文字 最近一直在从事工业测量方面的开发工作,难免会用到各种各样的相机,其中支持DX的USB相机开发起来比较方便,由于工作需要经常要在视频图像上叠加线条和文字 ...

随机推荐

  1. 使用Python和AWK两种方式实现文本处理的长拼接案例

    最近由于业务系统新需求的需要,我们平台需要将供应商G提供一类数据转换格式后提供给客户K.比较头疼是供应商G提供的数据都是在Windows下使用Excel存储的,而客户K先前与我们相关对接人员商定的数据 ...

  2. 网络拓扑_配置hybrid端口

    目的:实现不同VLAN间的PC不可互访, 但不同VLAN的PC均可以访问服务器. 例: VLAN5与VLAN10的PC不可以互通,但它们均可与服务器VLAN50互通. 拓扑图:

  3. Kubernetes部署DNS

    前言 阅读地址 http://thoreauz.com/2017/04/16/docker/Kubernetes%E9%83%A8%E7%BD%B2DNS%E5%92%8CDashboard/ Kub ...

  4. ps:选区的存储及载入

    有时候需要把已经创建好的选区存储起来,方便以后再次使用.就要使用选区存储功能. 创建选区后,直接点击右键(限于选取工具)出现的菜单中就“存储选区”项目.也可以使用菜单[选择 存储选区].会出现一个名称 ...

  5. 信号量计算问题--n个进程, 共享3个资源, 当前信号量为-1, 其他进程继续执行P操作, 那么信号量应该继续减

    选B

  6. springboot+thymeleaf 访问静态资源解决(static)

    ---------------------------------------2.1.3-------------------------------------------------------- ...

  7. php array_sum()函数 语法

    php array_sum()函数 语法 作用:返回数组中所有值的和.大理石构件价格 语法:array_sum(arra) 参数: 参数 描述 array  必需.规定数组. 说明:如果所有值都是整数 ...

  8. 怎么实现web端上传超大文件

    1.介绍enctype enctype 属性规定发送到服务器之前应该如何对表单数据进行编码. enctype作用是告知服务器请求正文的MIME类型(请求消息头content-type的作用一样) 1. ...

  9. locate 定位配置文件

    [root@VM_58_118_centos syhuo.net]# locate redis.conf /etc/redis.conf /etc/redis.conf_bak_20191008 /u ...

  10. 问候 UEditor 的大爷

    记录该日志的时间是2015年2月1日. 先给出 UEditor 项目的首页,它是一款由百度开发的开源富文本编辑器,关于它的介绍,大家可以查看百度百科. UEditor - 首页http://uedit ...