python-opencv:图像位运算

python-opencv:图像位运算

1.cv2.add():

      函数功能:将两个图片进行加和,大于255的使用255计数,需注意两输入图像image1和image2需要有相同的宽/高和通道数。

cv2.add(image1, image2) 

参数:
     1)img1:图片对象1
     2)img2:图片对象2
     3)mask:None(掩膜,一般用灰度图做掩膜,img1和img2相加后,和掩膜与运算,从而达到掩盖部分区域的目的;)
     4)dtype:-1

 

2.cv2.addWeighted():

      函数功能:将两个图片加权叠加,需注意两输入图像image1和image2需要有相同的宽/高和通道数。

cv2.addWeighted() 
参数:
   1)img1:图片对象1
   2)alpha:img1的权重
   3)img2:图片对象2
   4)beta:img1的权重
   5)gamma:常量值,图像相加后再加上常量值
   6)dtype:返回图像的数据类型,默认为-1,和img1一样
    (img1*alpha+img2*beta+gamma)

 

3.cv2.btwise_and():

      函数功能:两图像按位与操作,两个输入图像需要有相同的形状。

      经常看到的result = cv2.btwise_and(img1, img1,mask)的操作相当于对img1l保留mask部分,其余部分置0。

cv2.btwise_and(): 
参数:
    1)img1:图片对象1
    2)img2:图片对象2
    3)mask:掩膜

 

4.cv2.btwise_and():

      函数功能:两图像按位或操作,两个输入图像需要有相同的形状。

cv2.bitwise_or():
参数:
   1)img1:图片对象1
   2)img2:图片对象2
   3)mask:掩膜

 

5.cv2.btwise_xor():

      函数功能:异或运算,相同为1,不同为0。

cv2.bitwise_xor()
参数:
  1)img1:图片对象1
  2)img2:图片对象2
  3)mask:掩膜

 

 

6.cv2.btwise_not():

      函数功能:非运算,对输入图像按位取反。

cv2.bitwise_not(): 非运算
参数:
  1)img1:图片对象1
  2)mask:掩膜

 

7.如何对不同尺寸的图像进行叠加操作:

import cv2
import numpy as np
import matplotlib.pylab as plt

# 引入两个图片,第二个是logo
img1 = cv2.imread('data/2.jpg')
img2 = cv2.imread('data/maskFace.jpg')
plt.subplot(231),plt.imshow(img1)
plt.subplot(232),plt.imshow(img2)


# 设定图1的roi,注意:对roi的操作就是对img1的操作
r1,c1,ch1 = img1.shape
r2,c2,ch2 = img2.shape
# roi确定了图2所在图1的位置
roi = img1[r1-r2:r1, c1-c2:c1 ]


# 图2(logo)转换为灰度图
gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)


# 对图2阈值分割得到mask1(获取0~100部分)
# 保留mask1部分的roi
ret, mask1 = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY_INV)
fg1 = cv2.bitwise_and(roi,roi,mask=mask1)
plt.subplot(233),plt.imshow(fg1)
plt.subplot(234),plt.imshow(mask1)


# 对图2图2阈值分割得到mask2(获取100~255部分)
# 保留mask2部分的img2
ret, mask2 = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY)
# 保留img2的logo背景部分
fg2 = cv2.bitwise_and(img2,img2,mask = mask2)
plt.subplot(235),plt.imshow(fg2)


# 图像叠加
roi[:] = cv2.add(fg1, fg2)
plt.subplot(236),plt.imshow(img1)

plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值