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()

最新文章

  1. 耿丹CS16-2班第一次作业汇总
  2. 【Java】嵌套For循环性能优化案例
  3. 虚函数列表: 取出方法 // 虚函数工作原理和(虚)继承类的内存占用大小计算 32位机器上 sizeof(void *) // 4byte
  4. lua对模块接口扩展的一种方法
  5. C++实现网格水印之调试笔记(一)
  6. Spring MVC返回json数据给Android端
  7. CSS3 3D变形效果
  8. 对于java中的"\"和"/" 区别
  9. 【dp】求最长公共子序列
  10. jenkins-参数化构建(三)插件:Git Parameter
  11. vs2010 2013 2015 有用各种功能插件
  12. mysql json 使用 类型 查询 函数
  13. HDFS 开发中的文件配置优先级
  14. python中dir(),__dict__
  15. PP助手上传失效
  16. SQL Server2008安装后1433端口没监听问题
  17. java资料——顺序存储结构和链式存储结构(转)
  18. img标签src图片地址找不到显示默认图片
  19. Python3制作中文词云图
  20. ObjectTools反射实例

热门文章

  1. nginx 重写
  2. [sqlmap源码阅读] 数据库识别
  3. generator (1)
  4. 什么是Js原型?(1)(包括作用:继承)
  5. 搭建vue项目并启动vue项目
  6. 【leetcode】1041. Robot Bounded In Circle
  7. Flink 实战:如何解决生产环境中的技术难题?
  8. 阿里云推出SRT+杜比全景声直播方案,低成本打造高质量直播观感体验
  9. TextView控件常用属性
  10. groovy-2.4.11.jar时出错; invalid LOC header (bad signature)