代碼實戰
import os
import cv2
import numpy as np
#讀取圖片和縮放圖片
lenna=cv2.imread('images/lenna.png')
lenna=cv2.resize(src=lenna,dsize=(450,450))
#創建相同尺寸的圖片
npimg=np.ones(shape=(lenna.shape[0],lenna.shape[1],lenna.shape[2]),dtype=np.uint8)*100
#兩張圖片進行與運算
dst=cv2.add(src1=lenna,src2=npimg)
#顯示圖片
cv2.imshow('lenna',lenna)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
print('Pycharm')
可以看到最終得到的圖類似曝光。
def Subtract():
# 讀取圖片和縮放圖片
lenna = cv2.imread('images/lenna.png')
lenna = cv2.resize(src=lenna, dsize=(450, 450))
# 創建相同尺寸的圖片
npimg = np.ones(shape=(lenna.shape[0], lenna.shape[1], lenna.shape[2]), dtype=np.uint8) * 100
# 首先兩張圖片進行加法運算
dst = cv2.add(src1=lenna, src2=npimg)
#將進行加法之後的圖像再進行減法操作,還原回原圖
original=cv2.subtract(src1=dst,src2=npimg)
print("原圖中最大像素值: {}".format(lenna.max()))
print('相加之後的最大像素值: {}'.format(dst.max()))
print('相減之後的最大像素值: {}'.format(original.max()))
# 顯示圖片
cv2.imshow('lenna', lenna)
cv2.imshow('dst', dst)
cv2.imshow('original',original)
cv2.waitKey(0)
cv2.destroyAllWindows()
print("原圖中最大像素值: {}".format(lenna.max()))
print('相加之後的最大像素值: {}'.format(dst.max()))
print('相減之後的最大像素值: {}'.format(original.max()))
可以看到原圖中的最大像素值為255,而相加之後的最大像素值肯定也為255;但是假設原圖中有一個像素值為160的,首先加上100之後,那麼像素值變為255(因為超過了255,所以只能為255),那麼在相減的時候,這個像素值變為了155,和原來的160相比減小了,所以就算原來的圖先加後減,圖像一般也會變的稍微暗一點。
def mutilpImg():
# 讀取圖片和縮放圖片
lenna = cv2.imread('images/lenna.png')
lenna = cv2.resize(src=lenna, dsize=(450, 450))
# 創建相同尺寸的圖片
npimg = np.ones(shape=(lenna.shape[0], lenna.shape[1], lenna.shape[2]), dtype=np.uint8) * 100
#進行乘積
dst=cv2.multiply(src1=lenna,src2=npimg)
# 顯示圖片
cv2.imshow('lenna', lenna)
cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
為什麼輸出的為大部分為白色了,是因為相乘之後很多像素值都大於了255,所以最後的結果就是255,也就是導致圖像很多地方都是白色的。
def DividImg():
# 讀取圖片和縮放圖片
lenna = cv2.imread('images/lenna.png')
lenna = cv2.resize(src=lenna, dsize=(450, 450))
# 創建相同尺寸的圖片
npimg = np.ones(shape=(lenna.shape[0], lenna.shape[1], lenna.shape[2]), dtype=np.uint8) * 100
# 進行乘積
dst = cv2.divide(src1=lenna, src2=npimg)
# 顯示圖片
cv2.imshow('lenna', lenna)
cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(“原圖中最大像素值: {}”.format(lenna.max()))
print(“除法之後最大像素值: {}”.format(dst.max()))
可以看到原圖中的最大像素值為255,而原圖中所有的像素值都除了100之後,那麼最後的結果只能是<=3,所以看起來是黑色的。