算術運算符
概述
我們可以通過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()
邏輯運算符(后續更新)