openCV 核心操作 2 图像上的算术运算

基础函数

cv2.add() 
	#cv2.add(img1, img2) # 进行图片的加和
	#在opencv中加法是饱和操作,也就是有上限值,大于255的使用255计数
	###***需要合成的两个图片 大小必须一致***
	
cv2.addWeighted()
	#cv2.addWeighted(img1, 0.6, img2, 0.4, 0) 表示将两个图片进行重叠操作,可以自行设置两张图片的权重
	
cv2.threshold()
#ret, mask = cv2.threshold(img2gray, 175, 255, cv2.THRESH_BINARY) 
#cv2.THRESH_BINARY   表示阈值的二值化操作,大于阈值(175)使用maxval(255)代替,小于阈值(175)使用0代替		变成黑白图	
#cv2.threshold (src, thresh, maxval, type)
#src:源图片,必须是单通道
#thresh:阈值,取值范围0~255
#maxval:填充色,取值范围0~255
#type:阈值类型

# type的类型

#1.cv2.THRESH_BINARY   表示阈值的二值化操作,大于阈值使用maxval表示,小于阈值使用0表示

#2. cv2.THRESH_BINARY_INV  表示阈值的二值化翻转操作,大于阈值的使用0表示,小于阈值的使用最大值表示

#3. cv2.THRESH_TRUNC    表示进行截断操作,大于阈值的使用阈值表示,小于阈值的不变

#4. cv2.THRESH_TOZERO   表示进行化零操作,大于阈值的不变,小于阈值的使用0表示

#5. cv2.THRESH_TOZERO_INV  表示进行化零操作的翻转,大于阈值的使用0表示,小于阈值的不变

cv2.bitwise_not()
#mask_inv = cv2.bitwise_not(mask)
#将图片里像素值按位反向
##取反  原来黑白图变成白黑图(黑白互换)	
cv2.bitwise_and() 
#img1_bg = cv2.bitwise_and(roi,roi,mask = mask) 
#背景变成mask的背景,logo部分变黑,为0。	
#将图片里的像素值按位与
#打印结果,当使用bitwise_and时,取较小的值
cv2.bitwise_or()
##将图片里的像素值按位或
#打印结果,当使用bitwise_or时,取较大的值
cv2.bitwise_xor()
#将图片里的像素值按位异或
cv2.seamlessClone()
#cv2.seamlessClone(src, dst, mask, center, flags)
#src 目标影像    dst 背景图像
#mask 目标影像上的mask,表示目标影像上那些区域是感兴趣区域
#center 目标影像的中心在背景图像上的坐标!注意是目标影像的中心!
#flags 选择融合的方式,目前有NORMAL_CLONE、MIXED_CLONE和MONOCHROME_TRANSFER三种方法

图像加法

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

图像混合

import cv2 
import numpy as np

img1=cv2.imread('ml.png') 
img2=cv2.imread('logo.jpg')

#cv2.resize()    #改变图像大小,使其大小一样
img1 = cv2.resize(img1, (400, 400), interpolation=cv2.INTER_CUBIC)
img2 = cv2.resize(img2, (400, 400), interpolation=cv2.INTER_CUBIC)

dst=cv2.addWeighted(img1,0.7,img2,0.3,0)

cv2.imshow('dst',dst) 
cv2.waitKey(0) 
cv2.destroyAllWindow()

按位运算

import cv2 
import numpy as np
img1 = cv2.imread('roi.jpg') 
img2 = cv2.imread('logo.png')
rows,cols,channels = img2.shape 
roi = img1[0:rows, 0:cols ]
 
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
#灰色图片		#1111
ret, mask = cv2.threshold(img2gray, 175, 255, cv2.THRESH_BINARY) 
#cv2.THRESH_BINARY   表示阈值的二值化操作,大于阈值使用maxval表示,小于阈值使用0表示		变成黑白图			
				#2222
mask_inv = cv2.bitwise_not(mask)
#取反  原来黑白图变成白黑图(黑白互换)		
				#3333

img1_bg = cv2.bitwise_and(roi,roi,mask = mask) 
#img1_bg = cv2.bitwise_and(roi,roi,mask = mask) #背景变成mask的背景,logo部分变黑,为0。				
				#4444
img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)
#按位与操作,背景变成mask_inv的背景,为0(黑色),logo部分变成roi部分(彩色)。
				#5555
dst = cv2.add(img1_bg,img2_fg) mask
img1[0:rows, 0:cols ] = dst
cv2.imshow('res',img1) 
				#6666
cv2.waitKey(0) 
cv2.destroyAllWindows()

###分析:首先将opencv的logo转成灰度图像,然后使用threshold函数将灰阶像素与纯白像素分开得到一个2值图像并用其作为掩码图像。使用带掩码的位操作扣出logo形状,反向掩码的位操作得到logo图像,两者相加得到带logo的背景图。
#注:如果直接使用权重加,必然会有透明度,或者就是logo对背景进行全遮挡。

11112222在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

上述为1111-6666的结果图

cv2.resize() #改变图像大小

pic = cv2.resize(pic, (400, 400), interpolation=cv2.INTER_CUBIC)

#cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)
scr:原始图像
dsize:输出图像的尺寸(元组方式)
dst:输出图像
fx:沿水平轴缩放的比例因子
fy:沿垂直轴缩放的比例因子
interpolation:插值方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@bwang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值