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()

       

 

邏輯運算符(后續更新)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM