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

时间:2022-07-24
本文章向大家介绍图像处理笔记(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, 175, 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_inv)
#图像按位与操作,只有mask_inv[i]不等于0时,才会进行"and"运算
cv.imshow('img1_bg', img1_bg)

img2_fg = cv.bitwise_and(img2, img2, mask = mask)
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原图:

OpenCV_logo.png原图:

运算后的图:

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