opencv-python-学习笔记六(图像的基本运算)
算术运算符
概述
我们可以通过OpenCV函数(cv.add())或简单的numpy操作(res = img1 + img2)对两个图像运算。两个图像的 depth(存储每幅图像所用到的位数,图像深度确定彩色图像的每个像素可能有的颜色数) and type应该相同,或者第二个图像可以只是一个标量值。
但OpenCV加法和Numpy加法是有区别的。OpenCV加法是饱和运算,Numpy加法是模运算。
举个例子:
import cv2 as cv import numpy as np x = np.uint8([250]) #无符号8位整型,表示范围是[0, 255]的整数 y = np.uint8([10]) print(cv.add(x, y)) # 250+10 = 260 => [[255]] print(x+y) # 250+10 = 260 % 256 = 4 =>[4]
图像算术运算
参数含义:
src1:第一张图像
src2:第二张图像
dst:destination,目标图像,需要提前分配空间,可省略
mask:8位单通道数组,指定要更改的输出数组的元素。
scale:缩放比
dtype:输出数组的深度,默认等于-1
dst=cv.add(src1, src2[, dst[, mask[, dtype]]])
dst=cv2.subtract(src1,src2,dst,mask,dtype)
dst=cv2.multiply(src1,src2,dst,scale,dtype) dst = scale * src1 * src2
dst=cv2.divide(src1,src2,dst,scale,dtype) dst = scale * src1 / src2
举例:
import cv2 as cv import numpy as np img1 = cv.imread('1.jpg') # 图片1 img2 = cv.imread('2.jpg') # 图片2 add = cv.add(img1, img2) # 两个图像相加 subtract = cv.subtract(img1, img2) # 两个图像相减 multiply = cv.multiply(img1, img2) # 两个图像相乘 divide = cv.divide(img1, img2) # 两个图像相除 cv.imshow("test", add)
图像混合
这也是图像的添加,但是给图像不同的权重,因此它给人一种混合或透明的感觉。图像按下式添加:
dst=α⋅img1+β⋅img2+γ
dst=cv.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])
参数:
src1:第一幅图像
appha:第一个数组元素所占权重
src2:第二幅图像
beta:第二个数组元素所占权重
gamma:标量加到每个和上
dst:与输入数组具有相同大小和通道数的output数组
dtype:
import numpy as np import cv2 as cv def nothing(x): pass # Create a black image, a window img1 = np.zeros((300, 528, 3), np.uint8) img2 = cv.imread("2.jpg") cv.namedWindow('image') # create trackbars for color change cv.createTrackbar('change', 'image', 0, 1, nothing) while(1): k = cv.waitKey(1) & 0xFF if k == 27: break # get current positions of four trackbars change = cv.getTrackbarPos("change", 'image') dst = cv.addWeighted(img1, change, img2, 1-change, 0) cv.imshow("image", dst) cv.destroyAllWindows()
逻辑运算符(后续更新)