opencv2——图像上的算术运算4
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的更多相关文章
- OpenCV学习笔记(4)——图像上的算术运算
学习图像上的算术运算,加法,减法,位运算等 1.图像加法 使用cv2.add()将两幅图像进行加法运算,也可以用numpy运算,直接img+img1.两幅图像的大小和类型必须一致,或者第二个图像可以是 ...
- OpenCV-Python 图像上的算术运算 | 十一
目标 学习图像的几种算术运算,例如加法,减法,按位运算等. 您将学习以下功能:cv.add,cv.addWeighted等. 图像加法 您可以通过OpenCV函数cv.add()或仅通过numpy操作 ...
- opencv入门系列教学(六)图像上的算术运算(加法、融合、按位运算)
0.序言 这一篇博客我们将学习图像的几种算术运算,例如加法,减法,按位运算等. 1.图像加法 我们可以通过OpenCV函数 cv.add() 或仅通过numpy操作 res=img1+img2 res ...
- Opencv笔记(八)——图像上的算数运算
学习目标: 学习图像上的算术运算,加法,减法,位运算等. 学习函数cv2.add(),cv2.addWeighted() 等. 一.图像的加法 你可以使用函数 cv2.add() 将两幅图像进行加法运 ...
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)
在OpenCV2:图像的几何变换,平移.镜像.缩放.旋转(1)主要介绍了图像变换中的向前映射.向后映射.处理变换过程中浮点坐标像素值的插值算法,并且基于OpenCV2实现了两个简单的几何变换:平移和镜 ...
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)
图像的几何变换是在不改变图像内容的前提下对图像像素的进行空间几何变换,主要包括了图像的平移变换.镜像变换.缩放和旋转等.本文首先介绍了图像几何变换的一些基本概念,然后再OpenCV2下实现了图像的平移 ...
- OpenCV之响应鼠标(四):在图像上绘制出矩形并标出起点的坐标
涉及到两方面的内容:1. 用鼠标画出矩形.2.在图像上绘制出点的坐标 用鼠标绘制矩形,涉及到鼠标的操作,opencv中有鼠标事件的介绍.需要用到两个函数:回调函数CvMouseCallback和注册回 ...
- c# PictureBox 的图像上使用鼠标画矩形框
C# 中在图像上画框,通过鼠标来实现主要有四个消息响应函数MouseDown, MouseMove, MouseUp, Paint重绘函数实现.当鼠标键按下时开始画框,鼠标键抬起时画框结束. Poin ...
- 在DirectShow的视频图像上叠加线条和文字
在DirectShow的视频图像上叠加线条和文字 最近一直在从事工业测量方面的开发工作,难免会用到各种各样的相机,其中支持DX的USB相机开发起来比较方便,由于工作需要经常要在视频图像上叠加线条和文字 ...
随机推荐
- ASE Alpha Sprint - backend scrum 5
本次scrum于2019.11.10再sky garden进行,持续30分钟. 参与人: Zhikai Chen, Jia Ning, Jiyan He 请假: Xin Kang, Lihao Ran ...
- 02.Windows2012R2安装360安全卫士失败及无法卸载问题
问题: Windows 2012 R2 安装360安全卫士失败及无法卸载,导致网络无法通信问题解决. 解决:1.进入 Windows2012R2 安全模式下:2.进行覆盖安装360安全卫士:3.覆盖安 ...
- kali Linux 入门(二)
九.软件安装 1.apt install --软件名称-- -y 2.apt install packge_name----库安装 3.apt install kali-linux-all -y--- ...
- Codeforces Round #425 (Div. 2) - D
题目链接:http://codeforces.com/contest/832/problem/D 题意:给定一棵n个点的树,然后给你q个询问,每个询问为三元组(a,b,c),问你从这三个点中选取一个作 ...
- python3-定义函数
在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值的my_abs函数 ...
- 2018-08-01-weekly
Algorithm 4. Median of Two Sorted Arrays What 两个排序数组的中位数 How 两个数组合并到同一个数组,然后进行排序取中间值即可 Key Codes cla ...
- $2019$各种$WC$没去记
\(2019\)各种\(WC\)没去记 太弱了去不了啊. 至少我联赛没退役是吧...(退役感++ 不过这个分数线还是有点让人自闭啊,划线人绝对有毒,有人关照一下空巢老人\(mona\)喵? 这里大概是 ...
- APP稳定性测试-monkey执行
Monkey命令行可用的全部选项 *示例 : adb shell monkey -p cn.lejiayuan.alpha --pct-touch 30 --pct-motion 15 --pct-t ...
- Linux学习-基于CentOS7的MySQL5.7的GTID复制
一.GTID复制简介 GTID (global transaction id)全局事务标识符,MySQL5.6版本开始支持,GTID复制不像传统的复制方式(导步复制.半同步复制)需要找到binlog和 ...
- php str_replace()函数 语法
php str_replace()函数 语法 作用:字符串替换操作,区分大小写大理石构件 语法:str_replace(find,replace,string,count) 参数: 参数 描述 fin ...