目标

  • 掌握几种图像算术操作,比如加、减、按位操作等
  • 掌握函数cv2.add()、cv2.addWeighted()等

图像相加

图像相加可以通过OpenCV函数cv2.add()或者Numpy相加实现。需要注意的是OpenCV相加是饱和运算(即两个像素值之和大于255时取最大值255),Numpy相加是取模运算(即两个像素值之和大于255时取与255的余数)。

>>> x = np.uint8([250])
>>> y = np.uint8([10])
>>> print( cv.add(x,y) ) # 250+10 = 260 => 255
[[255]]
>>> print( x+y )          # 250+10 = 260 % 256 = 4
[4]

图像混合

图像混合也是图像相加,但是可以给图像不同的权重,会产生一种混合或者透明的感觉。图像按照下面的公式相加,

α在0-1之间变化,从而将一张图像融合到另一张图像中。

下面的代码混合两张图像,第一张图片的权重为0.7,第二张图片的权重为0.4,使用函数cv.addWeighted()完成上面公式,其中λ=0。

img1 = cv.imread('image\\lenacolor.png')
img2 = cv.imread('image\\girl.bmp')
img2 = cv.resize(img2,(512,512),interpolation=cv.INTER_CUBIC)
dst = cv.addWeighted(img1,0.7,img2,0.4,0)
cv.imshow('dst',dst)
cv.waitKey(0)
cv.destroyAllWindows()

按位运算

这一部分中包括按位与、或、非和异或运算。这部分操

作对于抽取图像的任意部位和定义处理非矩形感兴趣区域将会十分有用。下面我们将改变图片某一个特定区域。

下面的案例将OpenCV的logo放到另一张图片的左上角。

# 加入两张图片
img1 = cv.imread('image\\barbara.bmp',cv.IMREAD_UNCHANGED)
img2 = cv.imread('image\\OpenCV.png')
# 创建图片1的感兴趣区域,大小为图片2的尺寸
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
# 创建logo的掩膜和逆膜,首先将logo变成灰度图
img2gray = cv.cvtColor(img2,cv.COLOR_BGR2GRAY)
# 图片2进行二进制阈值化分割
ret, mask = cv.threshold(img2gray, 200, 255, cv.THRESH_BINARY)
# 创建逆膜,按位非运算
mask_inv = cv.bitwise_not(mask)
# 图片1的感兴趣区域的背景,按位与运算
img1_bg = cv.bitwise_and(roi,roi,mask = mask)
# 图片1的感兴趣区域的前景,按位与运算
img2_fg = cv.bitwise_and(img2,img2,mask = mask_inv)
# 将背景和前景相加
dst = cv.add(img1_bg,img2_fg)
# 将图片1的感兴趣区域替换成合成图片
img1[0:rows, 0:cols ] = dst
cv.imshow('res',img1)
cv.waitKey(0)
cv.destroyAllWindows()

结果如下图

上面代码中比较核心的有一些几句,

  • ret, mask = cv.threshold(img2gray, 200, 255, cv.THRESH_BINARY),以200作为阈值进行二进制阈值分割,获得二值图。
  • mask_inv = cv.bitwise_not(mask),按位非操作,获得与阈值分割的图相反的图片
  • img1_bg = cv.bitwise_and(roi,roi,mask = mask) ,以mask作为操作矩阵指导roi进行按位与操作,提取出roi的背景

  • img2_fg = cv.bitwise_and(img2,img2,mask = mask_inv),以mask_inv作为操作矩阵指导img2进行按位与操作,提取出logo前景

2-2 图像算数操作—OpenCV-Python教程翻译相关推荐

  1. OpenCV Python教程(2、图像元素的访问、通道分离与合并)

    OpenCV Python教程之图像元素的访问.通道分离与合并 转载请详细注明原作者及出处,谢谢! 访问像素 像素的访问和访问numpy中ndarray的方法完全一样,灰度图为: [python] v ...

  2. OpenCV Python教程(3)(4)(5): 直方图的计算与显示 形态学处理 初级滤波内

    OpenCV Python教程(3.直方图的计算与显示) 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途 ...

  3. python 图像无缝拼接,OpenCV Python 系列教程3 - Core 组件

    基本知识 灰度图像的存储方式: image 多通道图像存储方式 image OpenCV 中的通道存储为 BGR 像素值的存储方式 RGB 模式,显示设备采用这种模式 HSV.HLS 将颜色分解成色调 ...

  4. OpenCV Python教程(1、图像的载入、显示和保存)

    本文是OpenCV  2 Computer Vision Application Programming Cookbook读书笔记的第一篇.在笔记中将以Python语言改写每章的代码. PythonO ...

  5. opencv python教程简书_OpenCV-Python系列二:常用的图像属性

    对于图像,我们经常需要知道关于图像的特殊属性,比如宽度,高度,面积,像素点数目等等,那么在opencv-python中,这些信息如何获取呢? 本文结构: 1.基本图像属性 2. 对于opencv中的特 ...

  6. opencv python教程简书_OpenCV-Python教程:57.图像修复

    基础 你们可能家里都会有一些老照片已经有黑点啊,划痕啊等.你有想过修复它们么?我们不能简单的在绘图工具里把他们擦除了就完了.因为这样只是把黑色的东西变成白色的而已,实际上没用.在这种情况下,会用到一种 ...

  7. opencv python教程简书_OpenCV-Python教程:27.图像转换

    理论 傅里叶变换用来分析多种过滤器的频率特征.对于图片,2D离散傅里叶变换(DFT)用来找频率范围.一个快速算法叫快速傅里叶变换(FFT)用来计算DFT. 对于正弦信号,x(t) = Asin(2πf ...

  8. opencv python教程简书_Python-OpenCV —— 基本操作一网打尽

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.MacOS操作系统上.它轻量级而且高效--由一系列 C 函数和少量C++类构成,同时提供了Pyt ...

  9. opencv python教程-OpenCV4 Python 最新中文版官方教程来了(附下载)

    教程简介 OpenCV 是计算机视觉中经典的专用库,然而其中文版官方教程久久不来.近日,一款最新 OpenCV4.1 版本的完整中文版官方教程出炉,读者朋友可以更好的学习了解 OpenCV 相关细节. ...

最新文章

  1. poj 2739 Sum of Consecutive Prime Numbers
  2. 南邮java大作业实验报告_南京邮电大学java第三次实验报告
  3. 记一次灵活的模型训练生成的pth转onnx文件失败
  4. Android设置toolbar高度,Android基础知识之 Toolbar 的使用
  5. 前端学习(2938):vue对象之间的实例属性ref
  6. UVa 201 Square
  7. Mysql触发器与动态完整性
  8. python colorbar设置大小及位置_matplotlib colorbar更改轴大小
  9. 【MIMO通信】基于matlab空时分组编码MIMO_OFDM通信系统仿真【含Matlab源码 663期】
  10. kodi pvr 不能安装_Kodi添加m3u8直播源教程 使用PVR IPTV Simple Client看电视直播
  11. 浅析小米登录/注册页面(原生)
  12. 期刊第8期 | 分享C/C++嵌入式系统编程思想
  13. DongDong认亲戚
  14. 站在巨人的肩膀上-听课感想
  15. Kubernetes 1.12.0 Kube-controller-manager之node-ipam-controller源码阅读分析
  16. Android 7.1 亮度调节之BrightnessController
  17. 极力推荐的微信小程序,超级实用,一定要收藏
  18. oracle+sql+按中文拼音排序,Oracle 中文字段进行排序的sql语句
  19. VB中的ByVal和ByRef的区别
  20. 恭喜元宇宙产业委秘书长何超、执行秘书长武艳芳成为南京河西CBD发展大使

热门文章

  1. leetcode-441 排列硬币
  2. 小程序项目:基于微信小程序的师生答疑交流平台APP——计算机毕业设计
  3. 我为什么没有成为华为元老,谈精准学习,避免低水平勤奋
  4. 学猫叫歌词计算机,学猫叫歌词 小峰峰(陈峰)、小潘潘(潘柚彤)_晴格歌词网
  5. 使用java连接neo4j aura数据库
  6. 在线教育是否能完美结合直播授课与短视频呢?
  7. 人机大战硝烟再起:阿尔法狗升级了 柯洁拼了
  8. XSS和CSRF两种跨站攻击比较
  9. 从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (中)
  10. 记一次暴力破解tomcat后台密码(附带python脚本)