你真的瞭解對比度嗎?對比度是數字圖像中非常基本的概念,一幅圖像中明暗區域最亮的白和最暗的黑之間不同亮度層級的測量,即指一幅圖像灰度反差的大小。直白的說就是:對比度大整體的色彩更鮮豔,對比度小色彩感更平淡。接下來我們用像素直方圖的例子來形象的展示對比度大小在圖像上的差異。
1.整體實現代碼
from PIL import Image
from PIL import ImageEnhance
import matplotlib.pyplot as plt
import numpy as np
def get_piexl_list(img):
w, h = img.size[0], img.size[1]
img_list = img.load()
r_list = []
g_list = []
b_list = []
for i_w in range(w):
for j_h in range(h):
r, g, b = img_list[i_w, j_h]
r_list.append(r)
g_list.append(g)
b_list.append(b)
r_list = np.asarray(r_list)
g_list = np.asarray(g_list)
b_list = np.asarray(b_list)
return r_list,g_list,b_list
def draw_mulit_pic(r_list,g_list,b_list):
fig, ax = plt.subplots()
ax = fig.add_subplot(311)
ax2 = fig.add_subplot(312)
ax3 = fig.add_subplot(313)
ax.hist(r_list, bins=256, normed=True, color='yellow')
ax2.hist(g_list, bins=256, normed=True, color='red')
ax3.hist(b_list, bins=256, normed=True, color='blue')
plt.show()
def enhance_contrast(img):
enh_con = ImageEnhance.Contrast(img)
contrast = 1.5
img_contrasted = enh_con.enhance(contrast)
img_contrasted.show()
return img_contrasted
if __name__ == "__main__":
img = Image.open('D:\\1.jpeg')
# 原始圖像直方圖
r_list,g_list,b_list = get_piexl_list(img)
draw_mulit_pic(r_list, g_list, b_list)
# 對比度增強
img_contrasted = enhance_contrast(img)
# 對比度增強後圖像直方圖
r_list,g_list,b_list = get_piexl_list(img_contrasted)
draw_mulit_pic(r_list, g_list, b_list)
2.原始圖像直方圖
img = Image.open('D:\\1.jpeg')
# 原始圖像直方圖
r_list,g_list,b_list = get_piexl_list(img)
draw_mulit_pic(r_list, g_list, b_list)
利用上述代碼畫出原始圖像的像素直方圖,從下圖的直方圖中可以觀察到,直方圖差異比較大,起伏比較大。
3.增強後圖像直方圖
# 對比度增強
img_contrasted = enhance_contrast(img)
# 對比度增強後圖像直方圖
r_list,g_list,b_list = get_piexl_list(img_contrasted)
draw_mulit_pic(r_list, g_list, b_list)
利用PIL庫自帶的對比度增強策略對圖像進行增強,並重新將直方圖畫出來,從增強後的直方圖可以看到,整體的像素分佈會比較均勻。
4.對比度增強結果顯示
我喬神和奧胖彷彿做了美黑!