Python中關于matplotlib圖片的灰度處理方式
Python中matplotlib圖片的灰度處理
環(huán)境是ubuntu中的jupyter的環(huán)境
圖像的灰度化處理的基本原理
將彩色圖像轉化成為灰度圖像的過程成為圖像的灰度化處理。
為什么要進行灰度化處理
彩色圖像中的每個像素的顏色有R、G、B三個分量決定,而每個分量有255中值可取,這樣一個像素點可以有1600多萬(255*255*255)的顏色的變化范圍。
而灰度圖像是R、G、B三個分量相同的一種特殊的彩色圖像,其一個像素點的變化范圍為255種,所以在數(shù)字圖像處理種一般先將各種格式的圖像轉變成灰度圖像以使后續(xù)的圖像的計算量變得少一些。
灰度圖像的描述與彩色圖像一樣仍然反映了整幅圖像的整體和局部的色度和亮度等級的分布和特征。
圖像的灰度化處理可用三種方法來實現(xiàn)。
常見的三種方法
- 先對數(shù)據(jù)進行基本的處理
#引入包 import matplotlib.pyplot as plt %matplotlib inline import numpy as np
#讀取文件 zhima=plt.imread('芝麻.jpg') plt.imshow(zhima)
#轉變需要的類型,并且產(chǎn)生噪聲,顯示最后的圖片 zhima_noisy=zhima.copy().astype(float) zhima_noisy+=zhima_noisy.std()*0.3*np.random.standard_normal(zhima_noisy.shape) plt.imshow(zhima_noisy)
#查看形狀 zhima.shape #輸出結果為:(662, 1000, 3)
- 平均值法
#聚合操作后就減少了一個維度了 zhima_mean=zhima.mean(axis=2) zhima_mean.shape #輸出結果為:(662, 1000) plt.imshow(zhima_mean,cmap='gray')
- 最大值法
#最大值法 zhima_max=zhima.max(axis=-1) zhima_max.shape plt.imshow(zhima_max,cmap='gray')
- RGB三原色法
gravity= np.array([0.299,0.587,0.114]) #red*0.299+green*0.587+blue*0.114 #矩陣乘法 zhima_gravity=np.dot(zhima,gravity) zhima_gravity.shape plt.imshow(zhima_gravity,cmap='gray')
Matplotlib顯示灰度圖
matplotlib中的imshow()函數(shù)不能自動顯示灰度圖像,這一點應該是眾所周知的,需要調用cmap=“gray"以進行設置,但是cmap="gray"實際上并不是如opencv中的imshow函數(shù)一樣將單通道圖顯示為灰度圖,私以為是引入了灰度圖的灰度量化概念,但并不直接對應灰度,證明見正文。
測試
設置一全1.0的圖像(全白),和一全白背景疊加黑色條柱的圖像,使用plt.imshow()顯示。
代碼:
import matplotlib.pyplot as plt import numpy as np white=np.ones((100,100),dtype=float) bar=np.ones((100,100),dtype=float) bar[40:50,:]=0 plt.figure(1) plt.subplot(211) plt.imshow(white,cmap='gray') plt.title('white map') plt.subplot(212) plt.imshow(bar,cmap='gray') plt.title('black bar')
結果為:
由此可以發(fā)現(xiàn)在值全為1.0時,圖像顯示為黑色,那么是否是dtype的原因呢?測試常用的uint8情況下,亮度為恒定值,顯示幾何。
代碼為:
white1=np.ones((100,100),dtype=np.uint8)*255 white2=np.ones((100,100),dtype=np.uint8)*128 plt.figure((2)) plt.subplot(211) plt.imshow(white1,cmap='gray') plt.title('white1') plt.subplot(212) plt.imshow(white2,cmap='gray') plt.title('white2')
結果為:
由此可以確定,這一顯示“異常”與數(shù)據(jù)類型無關 。
解決方案
使用vmin,vmax參數(shù)指定灰度范圍,或者設定cmap為gray_r以使得灰度范圍反轉,后者只適用于想顯示白色背景。
代碼:
white1=np.ones((100,100),dtype=np.uint8)*255 white2=np.ones((100,100),dtype=np.uint8)*128 plt.figure((2)) plt.subplot(211) plt.imshow(white1,cmap='gray_r') plt.title('white1') plt.subplot(212) plt.imshow(white2,cmap='gray',vmin=0,vmax=255) plt.title('white2')
結果:
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
在Python代碼中執(zhí)行Linux命令的詳細用法教程
在Python開發(fā)過程中,經(jīng)常需要執(zhí)行Linux系統(tǒng)命令來完成各種任務,Python提供了多種方式來調用和執(zhí)行系統(tǒng)命令,本文將詳細介紹如何在Python代碼中執(zhí)行Linux命令,并結合實際案例來演示這些方法的使用,需要的朋友可以參考下2024-07-07解決Python3用PIL的ImageFont輸出中文亂碼的問題
今天小編大家分享一篇解決Python3用PIL的ImageFont輸出中文亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08