python使用matplotlib顯示圖像失真的解決方案
在python顯示圖象時,我們用matplotlib模塊時會遇到圖像色彩失真問題,究竟是什麼原因呢,下面就來看看究竟。
待顯示圖像為:
import cv2 from matplotlib import pyplot as plt img = cv2.imread('demo_2.jpg',0) plt.imshow(img, cmap = 'gray', interpolation = 'bicubic') plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis plt.show()
上面簡單的代碼運行結果為:
我們發現這個圖像雖然顯示出來瞭,但是與原圖像在顏色上的差距還是挺大的,本來一個白胖小子被顯示地陰陽怪氣的,這肯定不像話瞭。那麼我們要怎麼讓這個白胖小子用matplotlib模塊完美地顯示出來呢。
請看代碼:
import cv2 from matplotlib import pyplot as plt img = cv2.imread('demo_2.jpg', cv2.IMREAD_ANYCOLOR) b,g,r = cv2.split(img) img2 = cv2.merge([r, g, b]) plt.subplot(121) plt.imshow(img, cmap = 'gray', interpolation = 'bicubic') plt.xticks([]) plt.yticks([]) plt.subplot(122) plt.imshow(img2, cmap = 'gray', interpolation = 'bicubic') plt.xticks([]) plt.yticks([]) plt.show()
上述代碼運行結果如下:
我們通過代碼可以發現,隻要將通道按照bgr的順序組合,圖片就可以不失真地顯示出來瞭,這樣我們就明白瞭上述圖片失真地原因和解決失真的方法。
補充:python plot圖片失真的問題(避免type font 3字體的出現)
使用python畫圖時,開始直接使用png保存,沒想到圖片裡會默認使用type font 3的字體,導致圖片放入latex編譯後,圖片一放大就不清晰。
於是尋找瞭好多修改圖片設置的解決方法
即,加入以下三行:
# Switch to Type 1 Fonts. matplotlib.rcParams['ps.useafm'] = True matplotlib.rcParams['pdf.use14corefonts'] = True matplotlib.rcParams['text.usetex'] = True
但是我的問題還是沒解決…
以上的設置是需要的,隻是我輸出的圖片以png形式保存導致。所以,最後,我另替換瞭畫圖的操作以及加瞭一些包,即,
import matplotlib matplotlib.use('PDF') import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages plt.savefig('tmp.pdf', bbox_inches='tight')
圖片以pdf輸出,最後輸出的圖片就不會有type 3 font的問題啦,也就是圖片不管放多大,都可以很清楚!
所以,使用python保存實驗結果時,優選 PDF。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- 基於Python實現圖像的傅裡葉變換
- OpenCV圖像變換之傅裡葉變換的一些應用
- python imutils包基本概念及使用
- python OpenCV圖像直方圖處理
- python數據可視化plt庫實例詳解