学习目标:

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

  • 学习函数cv2.add(),cv2.addWeighted() 等。

一、图像的加法

你可以使用函数 cv2.add() 将两幅图像进行加法运算,当然也可以直接使用 numpy,res=img1+img。两幅图像的大小,类型必须一致,或者第二个图像可以是一个简单的标量值。注意:OpenCV 中的加法与 Numpy 的加法是有所不同的。OpenCV 的加法是一种饱和操作,而 Numpy 的加法是一种模操作。

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

即对于opencv来说,当像素值大于255时,他会饱和,使值取最大。对于numpy来说,当像素值大于255时,他会取模,令当前像素值取模255。故OpenCV 的结果会更好一点,所以我们尽量使用 OpenCV 中的函数。

import numpy as np
import cv2
img = cv2.imread('/home/wl/ng.png')
img1 = cv2.imread('/home/wl/le.jpeg')
res = cv2.resize(img,(600,500),interpolation=cv2.INTER_CUBIC)
res1 = cv2.resize(img1,(600,500),interpolation=cv2.INTER_CUBIC)
dst = cv2.add(res,res1)
cv2.imshow('opencv',dst)
cv2.imwrite('/home/wl/1.jpg',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

二、图像的混合

这其实也是加法,但是不同的是两幅图像的权重不同,这就会给人一种混合或者透明的感觉。通过修改 α 的值(0 → 1),可以实现非常酷的混合。图像混合的计算公式如下:

               g (x) = (1 − α) f 0 (x) + αf 1 (x)

import numpy as np
import cv2
img = cv2.imread('/home/wl/ng.png')
img1 = cv2.imread('/home/wl/le.jpeg')
res = cv2.resize(img,(600,500),interpolation=cv2.INTER_CUBIC)
res1 = cv2.resize(img1,(600,500),interpolation=cv2.INTER_CUBIC)
dst = cv2.addWeighted(res,0.7,res1,0.3,0)
cv2.imshow('opencv',dst)
cv2.imwrite('/home/wl/1.jpg',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.addWeighted()有五个参数,第一个和第二个参数分别是第一副图及其混合比例,第三个和第四个参数分别是第二副图及其混合比例,第五个参数取常数0。


三、结合上一篇博客实现下面要求

创建一个幻灯片用来演示一幅图如何平滑的转换成另一幅图

import numpy as np
import cv2 def nothing(x):
pass
img = np.zeros((600,500),np.uint8)
cv2.namedWindow('image')
cv2.createTrackbar('weight','image',0,100,nothing) img0 = cv2.imread('/home/wl/ng.png')
img1 = cv2.imread('/home/wl/le.jpeg')
res = cv2.resize(img0,(600,500),interpolation=cv2.INTER_CUBIC)
res1 = cv2.resize(img1,(600,500),interpolation=cv2.INTER_CUBIC)
while(1):
cv2.imshow('image', img)
k = cv2.waitKey(1) & 0xFF
if k == ord('q'):
break
r = cv2.getTrackbarPos('weight', 'image')
r = float(r)/100.0
img = cv2.addWeighted(res,r,res1,1-r,0) cv2.imwrite('/home/wl/1.jpg',img)
cv2.destroyAllWindows()

对于图像的按位运算,我将在后面博客介绍。

Opencv笔记(八)——图像上的算数运算的更多相关文章

  1. SpringMVC学习笔记八:文件上传及多个文件上传

    SpringMVC实现文件上传需要加入jar包,commons-fileupload-1.3.1.jar,commons-io-2.2.jar 项目目录树: pom.xml加入需要的包 <pro ...

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

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

  3. opencv笔记4:模板运算和常见滤波操作

    time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...

  4. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  5. Python下opencv使用笔记(图像频域滤波与傅里叶变换)

    Python下opencv使用笔记(图像频域滤波与傅里叶变换) 转载一只程序喵 最后发布于2018-04-06 19:07:26 阅读数 1654  收藏 展开 本文转载自  https://blog ...

  6. opencv笔记2:图像ROI

    time:2015年 10月 03日 星期六 12:03:45 CST # opencv笔记2:图像ROI ROI ROI意思是Region Of Interests,感兴趣区域,是一个图中的一个子区 ...

  7. Opencv笔记(二):图像的基本操作——续写

    1.图像的透视变换 对于视角变换,我们需要一个 3x3 变换矩阵.在变换前后直线还是直线.要构建这个变换矩阵,你需要在输入图像上找 4 个点,以及他们在输出图像上对应的位置.这四个点中的任意三个都不能 ...

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

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

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

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

随机推荐

  1. EF Core的安装及入门

    一.环境准备 1.开发环境:.NET Core 3.1 2.IDE工具:Visual Studio 2019 3.数据库:SQL Server 2012 二.EF Core的安装 1.新建一个项目,如 ...

  2. 判断单链表是否有环,并找出环的入口python

    1.如何判断一个链表是否有环? 2.如果链表为存在环,如果找到环的入口点? 1.限制与要求 不允许修改链表结构. 时间复杂度O(n),空间复杂度O(1). 2.思考 2.1判断是否有环 如果链表有环, ...

  3. 关于torch.nn.Linear的笔记

    关于该类: torch.nn.Linear(in_features, out_features, bias=True) 可以对输入数据进行线性变换: $y  = x A^T + b$ in_featu ...

  4. (5)opencv的基础操作和矩阵的掩模操作

    不懂的,可以简单,看看这个网址:https://blog.csdn.net/xiongwen_li/article/details/78503491 图片放到了桌面,所以,图片的路径就是桌面了,剩余的 ...

  5. Android自定义View——多边形网格属性图

      1.初始化变量 2.属性图解   3.如果想切换到5.6.7边形等等,则必须修改下面几条数据 4.获取宽和高 5.绘制图形 1.开始画画前:我们要把画笔准备好,这里看代码就能明白意思了,接着把整个 ...

  6. SQL COOKBOOK SQL经典实例代码 笔记第一章代码

    -- SQL COOKBOOK CHAPTER1 -- 查看所有内容 select * from emp; -- 可以单列 select empno,ename,job,sal,mgr,hiredat ...

  7. [极客大挑战 2019]FinalSQL

    0x00 知识点 盲注 0x01 解题 根据题目提示盲注,随便点几下找到注入点 发现我们输入^符号成功跳转页面,证明存在注入 1^(ord(substr((select(group_concat(sc ...

  8. C语言备忘录——向上取整

    众所周知,C语言的取整方式是向下取整,昨天老师留了一道思考题,问我们C语言怎么向上取整,当时我第一反应就是ceil(),老师说不能用if……else之类的,函数也不行.当时想了想没事不用就不用,去ma ...

  9. 18 12 30 服务器 Django 的初步使用 环境变量的调整

    1.安装django 1.1.下载Django包 https://www.djangoproject.com/download/https://www.djangoproject.com/m/rele ...

  10. 对python里的装饰器

    内裤可以用来遮羞,但是到了冬天它没法为我们防风御寒,聪明的人们发明了长裤,有了长裤后宝宝再也不冷了,装饰器就像我们这里说的长裤,在不影响内裤作用的前提下,给我们的身子提供了保暖的功效. 再回到我们的主 ...