Matplotlib無法顯示圖像的問題

繼之前搭建了Python+OpenCV的工作環(huán)境后,開始了Python環(huán)境下的圖像處理嘗試。
Matplotlib是一個Python下的圖形框架,可以很方便地進(jìn)行圖形化顯示。可以說是做圖像處理和數(shù)據(jù)分析必裝的庫。
但就是這個庫的使用過程中,遇到了一個奇怪的問題。

1. 現(xiàn)象

在virtualenv建立的虛擬環(huán)境中,無法用matplotlib來顯示圖像。程序運(yùn)行正常,沒有任何錯誤信息,也可以保存圖像,但無法在交互模式中將圖像顯示在屏幕上。
但換到本機(jī)環(huán)境中就可以正常顯示。

2. 原因

查了好久,大體確認(rèn)是matplotlib的backend(后端)設(shè)置有問題。
關(guān)于什么是matplotlib的后端,請參考官方文檔。簡單地理解,后端就是一個渲染器,用于將前端代碼渲染成我們想要的圖像。
我們可以查看一下目前的后端設(shè)置。

(cv)lai@Chen:~/work/cv$ python
Python 3.4.3+ (default, Oct 14 2015, 16:03:50) 
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib
>>> matplotlib.get_backend()
'agg'

目前是agg,但為了正確將圖像顯示在屏幕上,需要設(shè)置為TkAgg。

3. 解決辦法

首先安裝幾個依賴庫。

$ sudo apt-get install tcl-dev tk-dev python-tk python3-tk

然后進(jìn)入虛擬環(huán)境,用pip卸載已經(jīng)安裝的matplotlib庫。

$ pip uninstall matplotlib

然后重新安裝matplotlib。

$ pip install matplotlib

參考的解決方案中是通過下載源碼來重新編譯安裝matplotlib,但我發(fā)現(xiàn)直接安裝預(yù)編譯的版本也可以實(shí)現(xiàn)。

再來看一下目前的后端設(shè)置。

(cv)lai@Chen:~/work/cv$ python
Python 3.4.3+ (default, Oct 14 2015, 16:03:50) 
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib
>>> matplotlib.get_backend()
'TkAgg'

后端設(shè)置已經(jīng)被改過來了。

4. 測試

使用如下測試代碼,用于同時顯示原始圖片和快速傅里葉變換后的結(jié)果。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('apple.jpg', 0)
dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)

magnitude_spectrum = 20 * \
    np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))
plt.subplot(121).imshow(img, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122).imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.savefig('a.png', format='png')
plt.show()

顯示結(jié)果如下:


運(yùn)行結(jié)果

matplotlib可以正確地在屏幕上顯示圖像了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,835評論 6 427
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評論 25 709
  • 前幾天,我和孩子去體檢。體檢完我們一起去用餐。吃完飯,孩子說:“媽媽,我真佩服你!”我問:“為什么?”孩子說:“因...
    清風(fēng)2005閱讀 262評論 0 2
  • 從后天起,做一個居家的女子 逛淘寶,陪孩子,做美食 周末里頂一朵太陽帽 騎電車,走親戚 再做一個嫻淡的女子 讀小文...
    改變自己369閱讀 449評論 0 0
  • 距離吃過早飯才兩個小時,我又來到一家小店,叫了一份蛋炒飯,開始我的午餐。小店只有一張桌子,不過還算干凈。我問過多少...
    愛你新新閱讀 399評論 0 0

友情鏈接更多精彩內(nèi)容