博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Opencv笔记(八)——图像上的算数运算
阅读量:5950 次
发布时间:2019-06-19

本文共 2129 字,大约阅读时间需要 7 分钟。

学习目标:

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

  • 学习函数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 npimport cv2img = 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 npimport cv2img = 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 npimport cv2def nothing(x):    passimg = 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()

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

转载于:https://www.cnblogs.com/longwhite/p/10397775.html

你可能感兴趣的文章
Java构建工具Ant之在Windows下配置环境变量
查看>>
华为多臂路由配置
查看>>
网站最后是.com\.cn\.net有什么区别么?
查看>>
DNS 服务器的搭建
查看>>
LINUX -bash java command not found
查看>>
【docker】02、docker安装
查看>>
num_plus_sep
查看>>
将博客搬至CSDN
查看>>
Spring2.5学习笔记2-AOP-基本概念
查看>>
TCP/IP三次握手详细过程
查看>>
马哥linux+python——2015年9月1日课程作业
查看>>
你的梦想还在吗
查看>>
BIGIP-LTM中的NAT和SNAT
查看>>
sed单行处理命令奇偶行输出
查看>>
走向DBA[MSSQL篇] 从SQL语句的角度 提高数据库的访问性能
查看>>
VC++深入详解学习笔记1
查看>>
对OpenBSD中的OSPF和BGP路由协议的探索
查看>>
安装配置discuz
查看>>
CentOS7 64位小型操作系统的安装
查看>>
线程互互斥锁
查看>>