• 学习图像上的算术运算,加法,减法,位运算等

1.图像加法

  使用cv2.add()将两幅图像进行加法运算,也可以用numpy运算,直接img+img1。两幅图像的大小和类型必须一致,或者第二个图像可以是一个简单的标量值。

  两种操作的本质区别在于OpenCV的加法是一种饱和操作,加到顶后就不在上升了;而Numpy是模操作,具体如下:

import numpy as np
import cv2

x = np.uint8([250])
y = np.uint8([10])
print(cv2.add(x,y))
print(x+y)  

#[[255]]
#[4] 相当于(255+10)%256 = 4

在具体对两幅图像操作时会更加明显。一般来说OpenCV的结果会好一些,因此一般用OpenCV的函数

2.图像混合

即带权加法,可以将两幅图混合给人一种透明或者混合的感觉。具体公式很简单:

具体实现是用cv2.addWeighted(),例程如下:

import numpy as np
import cv2 img1 = cv2.imread('20180705-153550.jpg')
img2 = cv2.imread('20180708-085334.jpg') cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.waitKey(0) dst = cv2.addWeighted(img1, 0.7, img2, 0.3,0)#第一个数字是第一幅图的权值,第二个数字是第二幅图的权值,最后一个是个常数γ值 cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

在使用这个函数时,注意两幅图必须尺寸要相同,否则会报错

3.按位运算

  包括按位操作有:AND,OR,NOT,XOR等。提取图片一部分的时候会很有用。比如有要将一个logo的中间部分挖掉放到另一个图里,使用简单的ROI操作是办不到的。

import numpy as np
import cv2 img1 = cv2.imread('5.jpg')
img2 = cv2.imread('2.jpg') #先将背景图中和logo图大小相同的部分挖出来
rows, cols, channels = img2.shape
roi = img1[0:rows, 0:cols]
cv2.imshow('roi',roi)
cv2.waitKey(0) img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY) #对logo图设置掩码或反掩码,方便后面从背景抠出logo部分,已及从logo图中单独抠出logo
ret,mask = cv2.threshold(img2gray,175,255,cv2.THRESH_BINARY)#threshold的用法,第一位为原图(只能是单通道图一般为灰度图),第二个是阈值,大于阈值的像素点取第三位的数字,最后一个是二值化操作类型
mask_inv = cv2.bitwise_not(mask)#按位NOT运算
cv2.imshow('mask',mask)
cv2.imshow('mask_inv',mask_inv)
cv2.waitKey(0) #分别从背景中抠出logo的位置,以及从logo图中抠出logo
img1_bg = cv2.bitwise_and(roi,roi,mask = mask)#自己与自己AND运算,mask的作用在于前面两幅图AND后再与掩码做AND,使原图中掩码为1的像素变为1(全黑)
img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)
cv2.imshow('bg',img1_bg)
cv2.imshow('fg',img2_fg)
cv2.waitKey(0) dst = cv2.add(img1_bg,img2_fg)%结合背景和logo
img1[0:rows,0:cols] = dst cv2.imshow('res',img1)
cv2.waitKey(0)
cv2.destroyAllWindows() 最终效果为
												

OpenCV学习笔记(4)——图像上的算术运算的更多相关文章

  1. [OpenCV学习笔记3][图像的加载+修改+显示+保存]

    正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...

  2. OpenCV学习笔记(7)——图像阈值

    简单阈值,自适应阈值,Otsu's二值化等 1.简单阈值 当像素值高于阈值时,我们给这个像素赋予一个新值,否则给他赋予另一个值.这个函数就是cv2.threshhold().这个函数的第一个参数就是原 ...

  3. OpenCV学习笔记(10)——图像梯度

    学习图像梯度,图像边界等 梯度简单来说就是求导. OpenCV提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr和Lapacian.Sobel,Scharr其实就是求一阶或二阶导. ...

  4. opencv学习笔记(七)---图像金字塔

    图像金字塔指的是同一图像不同分辨率的子图的集合,有向下取样金字塔,向上取样金字塔,拉普拉斯金字塔....它是图像多尺度表达的一种,最主要的是用于图像的分割 向下取样金字塔指高分辨率图像向低分辨率图像的 ...

  5. opencv学习笔记(五)----图像的形态学操作

    图像的形态学操作有基本的腐蚀和膨胀操作和其余扩展形态学变换操作(高级操作)-----开运算,闭运算,礼帽(顶帽)操作,黑帽操作...(主要也是为了去噪声,改善图像) 形态学操作都是用于处理二值图像(其 ...

  6. OpenCV学习笔记(3)——图像的基本操作

    获取图像的像素值并修改 获取图像的属性(信息) 图像的ROI() 图像通道的拆分及合并 1.获取并修改像素值 先读入图像装入一个图像实体,然后该实体相当于一个多维list,可以直接用数组操作提取像素信 ...

  7. opencv学习笔记(六)---图像梯度

    图像梯度的算法有很多方法:sabel算子,scharr算子,laplacian算子,sanny边缘检测(下个随笔)... 这些算子的原理可参考:https://blog.csdn.net/poem_q ...

  8. opencv学习笔记3——图像缩放,翻转和阈值分割

    #图像的缩放操作 #cv.resize(src,dsize,dst=None,,fx=None,fy=None,interpolation=None) #src->原图像,dsize->目 ...

  9. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

随机推荐

  1. ASP.NET Core WebAPI帮助页--Swagger简单使用1.0

    1.什么是Swagger? Swagger是一个规范且完整的框架,提供描述.生产.消费和可视化RESTful API,它是为了解决Web API生成有用文档和帮助页的问题.   2.为啥选用swagg ...

  2. springboot(1)-基础篇

    什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...

  3. 1.(基础)tornado初识

    tornado的话就不带着大家看源码了,今后可能会介绍,目前只是看简单的用法,而且当前的tornado版本不高,其实说白了这是很久以前写的文档,但是由于格式的原因,所以打算用Markdown重写一次. ...

  4. python学习-输入输出

    Python的输入和输出非常方便,下面详细记录一下 任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果.输入是Input, ...

  5. 小米Air 13.3 安装Arch Linux

    0. 前言 最近新买了一台小米Air 13.3,除了但键盘手感外都比较满意.我比较喜欢折腾Linux,但又不想放弃原有的Windows 10 Home,于是在原有的windows 10基础上再安装了A ...

  6. pickle和JSON的序列化

    Pickle和JSON的序列化 Python的pickle模块允许我们把对象只节存储成一个特殊的存储格式,它本质上是把一个对象转换成一种可以存储到文件或者类文件对象或者一个字节字符串的格式: > ...

  7. CISCO运维记录之4507设备升级IOS(Version 03.03.02.SG版本存在bug)

    CISCO运维记录之3650堆叠设备升级IOS(Version 03.03.02.SG版本存在bug) 1. 问题详情 思科45系列交换机使用Catalyst 4500 L3 Switch Softw ...

  8. Summer training round2 #7 (Training #23)

    A:约瑟夫环 套公式 B:线性筛素数 C:投骰子 概率DP F:有权无向图的生成树(边最大值和最小值只差最小) 直接kruskal G:状压BFS或者双向BFS H:模拟题 I:几何题 J:高斯消元

  9. PHP数字处理

    援引自博文 https://blog.csdn.net/hongxiaoshuang/article/details/54598757 ceil -- 进一法取整 float ceil ( float ...

  10. .NET-list扩展方法Distinct去重

    原文链接:https://blog.csdn.net/daigualu/article/details/70800012 .NET中list的扩展方法Distinct可以去掉重复的元素,分别总结默认去 ...