天天看點

opencv-python學習筆記三:像素變換

#代碼參考b站python+opencv3.3視訊教學 基礎入門 賈志剛
import cv2 as cv
import numpy as np
#邏輯運算:與:都為1才為真,或:都位0才為假 異或:相同為假,不同為真


def add_demo(m1,m2):
    dst=cv.add(m1,m2)
    cv.imshow("add",dst)


def subtract_demo(m1,m2):
    dst=cv.subtract(m1,m2)
    cv.imshow("subtract",dst)


def multiply_demo(m1,m2):
    dst=cv.multiply(m1,m2)
    cv.imshow("multiply",dst)


def divide_demo(m1,m2):
    dst=cv.divide(m1,m2)
    cv.imshow("divide",dst)


def mean_function(m1,m2):
    # 計算3個通道各自的均值
    M1=cv.mean(m1)
    M2=cv.mean(m2)
    print(M1)
    print(M2)


def meanstddev_function(m1,m2):
    # 計算三個通道各自的均值和标準差
    M1,dev1=cv.meanStdDev(m1)
    M2,dev2=cv.meanStdDev(m2)

    print(M1)
    print(M2)

    print(dev1)
    print(dev2)


def contrast_brightness_demo(image,a,g):
    h,w,ch=image.shape
    blank=np.zeros([h,w,ch],image.dtype)
    dst=cv.addWeighted(image,a,blank,1-a,g)
    cv.imshow("addweight",dst)


src1 = cv.imread("C:/Users/hyn/Desktop/Linux2.jpg")
src2 = cv.imread("C:/Users/hyn/Desktop/windows.jpg")
print(src1.shape)
print(src2.shape)
# cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
# cv.imshow("src1",src1)
# cv.imshow("src2",src2)

add_demo(src1,src2)
subtract_demo(src1,src2)
multiply_demo(src1,src2)
divide_demo(src1,src2)

mean_function(src1,src2)
meanstddev_function(src1,src2)

contrast_brightness_demo(src2,1.2,10)  # 第一個1.2為對比度  第二個為亮度數值越大越亮
cv.waitKey(0)

cv.destroyAllWindows()

# addWeighted函數:官方:計算兩個圖像陣列的權重和 我的了解是按照所占比例合成兩張圖檔。
#
# addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);
#
# 一共有七個參數:前4個是兩張要合成的圖檔及它們所占比例,第5個double gamma起微調作用,第6個OutputArray dst是合成後的圖檔,第七個輸出的圖檔的類型(可選參數,預設-1)
#
# 有公式得出兩個圖檔加成輸出的圖檔為:dst=src1*alpha+src2*beta+gamma
           

繼續閱讀