Opencv3学习笔记(C++&Python双语)---图像上的算术运算

 

 

涉及函数cv2.add() ,cv2.addWeighted()

1.图像加法
使用cv2.add()将两幅图像进行加法运算,也可以直接使用numpy,res=img1+img2.两幅图像的大小,类型必须一致,或者第二个图像可以是一个简单的标量值。
2.图像混合
这也是加法,不同的是两幅图像的权重不同,这会给人一种混合或者透明的感觉。图像混合的计算公式如下:
g(x) = (1−α)f0 (x)+αf1 (x)种饱和操作,而numpy的加法是一种模操作。

3.按位运算
这里包括按位操作有:AND,OR,NOT,XOR等,当我们提取图像的一部分,选择非矩形ROI时,会很有用(下章)。下面进行如何改变一幅图的特定区域。

python 代码

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

img1 = cv.imread("E:\\opencv2020\\picture\\j20.jpg")
img2 = cv.imread("E:\\opencv2020\\picture\\opencv_logol.jpg")

rows,cols,channels = img2.shape
roi = img1[0:rows,20:20+cols]


img2gray = cv.cvtColor(img2,cv.COLOR_BGR2GRAY)
ret,mask = cv.threshold(img2gray,175,255,cv.THRESH_BINARY)
mask_inv= cv.bitwise_not(mask)

img1_bg =  cv.bitwise_and(roi,roi,mask = mask)
img2_fg = cv.bitwise_and(img2,img2,mask = mask_inv)

cv.imshow("roi",roi)
cv.imshow("mask",mask)
cv.imshow("mask_inv",mask_inv)
cv.imshow("img1_bg",img1_bg)
cv.imshow("img2_fg",img2_fg)

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

cv.imshow("res",img1)
plt.show()
cv.waitKey(0)

 运行结果

Opencv3学习笔记(C++&Python双语)---图像上的算术运算_第1张图片  Opencv3学习笔记(C++&Python双语)---图像上的算术运算_第2张图片 Opencv3学习笔记(C++&Python双语)---图像上的算术运算_第3张图片

  Opencv3学习笔记(C++&Python双语)---图像上的算术运算_第4张图片 Opencv3学习笔记(C++&Python双语)---图像上的算术运算_第5张图片 Opencv3学习笔记(C++&Python双语)---图像上的算术运算_第6张图片

运行结果将opencv的logol和歼20图片相加,先对opencv_logol进行阈值化操作,返回一个掩码mask,bitwise_and操作使用mask将roi中与img2图像重合的部分像素值变为0(既图中的黑色部分),得到img1_bg,同样的操作使用mask_inv将img2的背景变成黑色,既img2_fg,最后将img1_bg与img_fg相加在赋值给img。

你可能感兴趣的:(Opencv3学习笔记(C++&Python双语)---图像上的算术运算)