图像处理笔记(3)---- OpenCV 图像算术运算

我想把OpenCV的标志放到另一幅图像上,如果使用相加add函数,颜色会改变,使用addWeighted函数会得到透明效果,怎么做呢?

import cv2 as cv
# import numpy as np

img1 = cv.imread('C:\\Users\\dragon\\Pictures\\Camera Roll\\ali.jpg')
img2 = cv.imread('C:\\Users\\dragon\\Pictures\\Camera Roll\\OpenCV_logo.png')

rows,cols,channels = img2.shape#获取img2图像的长、宽和RGB通道数
roi = img1[0:rows, 0:cols]#在img1中截取和img2同样像素大小的图像

cv.imshow('roi',roi)

img2gray = cv.cvtColor(img2, cv.COLOR_BGR2GRAY)#获取img2的灰度图
ret, mask = cv.threshold(img2gray, 170, 255, cv.THRESH_BINARY)
# 图像二值化
# 第一个原图像,第二个进行分类的阈值,第三个是高于(低于)阈值时赋予的新值,第四个是一个方法选择参数,常用的有:
# • cv2.THRESH_BINARY(黑白二值)
# • cv2.THRESH_BINARY_INV(黑白二值反转)
# • cv2.THRESH_TRUNC (得到的图像为多像素值)
# • cv2.THRESH_TOZERO
# • cv2.THRESH_TOZERO_INV

mask_inv = cv.bitwise_not(mask)#将黑白颜色反转
cv.imshow('mask', mask)
cv.imshow('mask_inv', mask_inv)

img1_bg = cv.bitwise_and(roi, roi, mask = mask)
#图像按位与操作,只有mask_inv[i]不等于0时,才会进行"and"运算
cv.imshow('img1_bg', img1_bg)

img2_fg = cv.bitwise_and(img2, img2, mask = mask_inv)
cv.imshow('img2_fg', img2_fg)

dst = cv.add(img1_bg, img2_fg)
img1[0:rows, 0:cols] = dst


cv.imshow('res', img1)
cv.waitKey(0)
cv.destroyAllWindows()

代码如上,我把过程中的图像截图出来,这样会更好理解
ali.jpg原图:
aili.jpg原图
OpenCV_logo.png原图:
OpenCV_logo.png
运算后的图:
合成图

运算中间的图,图片框的标题对应程序中的图:
过程图

猜你喜欢

转载自blog.csdn.net/qq_24546137/article/details/108430469