Python 7.OpenCV 获取执行时间 抠图添加到另一个图、按位运算

与运算:对掩膜的白色区域保留,黑色区域去除

非运算:取反运算,黑变白,白变黑

import cv2
import numpy as np
from matplotlib import pyplot as plt


img1 = cv2.imread('image/pic2.png')
img2 = cv2.imread('image/logo.png')

rows, cols, channels = img2.shape

roi = img1[0:rows, 0:cols]

img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
# 获取二值化图像
ret, mask = cv2.threshold(img2gray, 200, 255, cv2.THRESH_BINARY)
# 获取二值化图像的反转图像
mask_inv = cv2.bitwise_not(mask)

e1 = cv2.getTickCount()  # 获取现在的时间

# get the argument of image
print(img1.shape)
print(img1.size)
print(img1.dtype)

e2 = cv2.getTickCount()  # 获取现在的时间
t = (e2 - e1) / cv2.getTickFrequency()  # 计算时间
print(t)

roi11 = roi.copy()  # 计算后roi会改变,必须用copy,直接赋值占用相同地址,效果不会改变
# 获取掩膜等,还没搞清
img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)

img2_fg = cv2.bitwise_and(img2, img2, mask=mask_inv)

# 图片相加,在opencv中加法是饱和操作,也就是有上限值,numpy会对结果取模。
dst1 = cv2.add(img1_bg, img2_fg)
img1[0:rows, 0:cols] = dst1

# 图片按照比例混合
#dst2 = cv2.addWeighted(img1, 0.5, img2, 0.5, 0)

plt.figure(figsize=(11, 11))

b, g, r = cv2.split(img1)
img1 = cv2.merge([r, g, b])
plt.subplot(331), plt.imshow(img1), plt.title('img1')

b, g, r = cv2.split(img2)
img2 = cv2.merge([r, g, b])
plt.subplot(332), plt.imshow(img2), plt.title('img2')

plt.subplot(333), plt.imshow(img2gray, 'gray'), plt.title('img2gray')

b, g, r = cv2.split(roi11)
roi11 = cv2.merge([r, g, b])
plt.subplot(334), plt.imshow(roi11), plt.title('roi11')

plt.subplot(335), plt.imshow(mask, 'gray'), plt.title('mask')
plt.subplot(336), plt.imshow(mask_inv, 'gray'), plt.title('mask_inv')

b, g, r = cv2.split(img1_bg)
img1_bg = cv2.merge([r, g, b])
plt.subplot(337), plt.imshow(img1_bg), plt.title('img1_bg')

b, g, r = cv2.split(img2_fg)
img2_fg = cv2.merge([r, g, b])
plt.subplot(338), plt.imshow(img2_fg), plt.title('img2_fg')

b, g, r = cv2.split(dst1)
dst1 = cv2.merge([r, g, b])
plt.subplot(339), plt.imshow(dst1), plt.title('dst1')

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值