<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 圖像教程 > 原文:[Image tutorial](http://matplotlib.org/users/image_tutorial.html) > 譯者:[飛龍](https://github.com/) > 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) ## 啟動命令 首先,讓我們啟動 IPython。 它是 Python 標準提示符的最好的改進,它與 Matplotlib 配合得相當不錯。 在 shell 或 IPython Notebook 上都可以啟動 IPython。 隨著 IPython 啟動,我們現在需要連接到 GUI 事件循環。 它告訴 IPython 在哪里(以及如何顯示)繪圖。 要連接到 GUI 循環,請在 IPython 提示符處執行`%matplotlib`魔法。 在 [IPython 的 GUI 事件循環文檔](http://ipython.org/ipython-doc/2/interactive/reference.html#gui-event-loop-support)中有更多的細節。 如果使用 IPython Notebook,可以使用相同的命令,但人們通常以特定參數使用`%matplotlib`: ``` In [1]: %matplotlib inline ``` 這將打開內聯繪圖,繪圖圖形將顯示在筆記本中。 這對交互性有很重要的影響。 對于內聯繪圖,在單元格下方的單元格中輸出繪圖的命令不會影響繪圖。 例如,從創建繪圖的單元格下面的單元格更改顏色表是不可能的。 但是,對于其他后端,例如 qt4,它們會打開一個單獨的窗口,那些創建繪圖的單元格下方的單元格將改變繪圖 - 它是一個內存中的活對象。 本教程將使用`matplotlib`的命令式繪圖接口`pyplot`。 該接口維護全局狀態,并且可用于簡單快速地嘗試各種繪圖設置。 另一種是面向對象的接口,這也非常強大,一般更適合大型應用程序的開發。 如果你想了解面向對象接口,[使用上的常見問題](http://matplotlib.org/faq/usage_faq.html)是一個用于起步的不錯的頁面。 現在,讓我們繼續使用命令式方式: ```py In [2]: import matplotlib.pyplot as plt In [3]: import matplotlib.image as mpimg In [4]: import numpy as np ``` ## 將圖像數據導入到 NumPy 數組 加載圖像數據由 Pillow 庫提供支持。 本來,`matplotlib`只支持 PNG 圖像。 如果本機讀取失敗,下面顯示的命令會回退到 Pillow。 此示例中使用的圖像是 PNG 文件,但是請記住你自己的數據的 Pillow 要求。 下面是我們要擺弄的圖片: ![](http://matplotlib.org/_images/stinkbug.png) 它是一個 24 位 RGB PNG 圖像(每個 R,G,B 為 8 位)。 根據你獲取數據的位置,你最有可能遇到的其他類型的圖像是 RGBA 圖像,擁有透明度或單通道灰度(亮度)的圖像。 你可以右鍵單擊它,選擇`Save image as`(另存為)為本教程的剩余部分下載到你的計算機。 現在我們開始... ```py In [5]: img=mpimg.imread('stinkbug.png') Out[5]: array([[[ 0.40784314, 0.40784314, 0.40784314], [ 0.40784314, 0.40784314, 0.40784314], [ 0.40784314, 0.40784314, 0.40784314], ..., [ 0.42745098, 0.42745098, 0.42745098], [ 0.42745098, 0.42745098, 0.42745098], [ 0.42745098, 0.42745098, 0.42745098]], ..., [[ 0.44313726, 0.44313726, 0.44313726], [ 0.4509804 , 0.4509804 , 0.4509804 ], [ 0.4509804 , 0.4509804 , 0.4509804 ], ..., [ 0.44705883, 0.44705883, 0.44705883], [ 0.44705883, 0.44705883, 0.44705883], [ 0.44313726, 0.44313726, 0.44313726]]], dtype=float32) ``` 注意這里的`dtype` - `float32`。 Matplotlib 已將每個通道的8位數據重新定標為 0.0 和 1.0 之間的浮點數。 作為旁注,Pillow 可以使用的唯一數據類型是`uint8`。 Matplotlib 繪圖可以處理`float32`和`uint8`,但是對于除 PNG 之外的任何格式的圖像,讀取/寫入僅限于`uint8`數據。 為什么是 8 位呢? 大多數顯示器只能渲染每通道 8 位的顏色漸變。 為什么他們只能渲染每通道 8 位呢? 因為這會使所有人的眼睛可以看到。 更多信息請見(從攝影的角度):[Luminous Landscape 位深度教程](http://www.luminous-landscape.com/tutorials/bit-depth.shtml)。 每個內部列表表示一個像素。 這里,對于 RGB 圖像,有 3 個值。 由于它是一個黑白圖像,R,G 和 B 都是類似的。 RGBA(其中 A 是阿爾法或透明度)對于每個內部列表具有 4 個值,而且簡單亮度圖像僅具有一個值(因此僅是二維數組,而不是三維數組)。 對于 RGB 和 RGBA 圖像,`matplotlib`支持`float32`和`uint8`數據類型。 對于灰度,`matplotlib`只支持`float32`。 如果你的數組數據不符合這些描述之一,則需要重新縮放它。 ## 將 NumPy 數組繪制為圖像 所以,你將數據保存在一個`numpy`數組(通過導入它,或生成它)。 讓我們渲染它吧。 在 Matplotlib 中,這是使用`imshow()`函數執行的。 這里我們將抓取`plot`對象。 這個對象提供了一個簡單的方法來從提示符處理繪圖。 ```py In [6]: imgplot = plt.imshow(img) ``` ![](http://matplotlib.org/_images/image_tutorial-1.png) 你也可以繪制任何 NumPy 數組。 ### 對圖像繪圖應用偽彩色方案 偽彩色可以是一個有用的工具,用于增強對比度和更易于可視化你的數據。 這在使用投影儀對你的數據進行演示時尤其有用 - 它們的對比度通常很差。 偽彩色僅與單通道,灰度,亮度圖像相關。 我們目前有一個RGB圖像。 由于R,G 和 B 都是相似的(見上面或你的數據),我們可以只選擇一個通道的數據: ```py In [7]: lum_img = img[:,:,0] ``` 這是數組切片,更多信息請見[NumPy 教程](http://www.scipy.org/Tentative_NumPy_Tutorial)。 ```py In [8]: plt.imshow(lum_img) ``` ![](http://matplotlib.org/_images/image_tutorial-2.png) 現在,亮度(2D,無顏色)圖像應用了默認顏色表(也稱為查找表,LUT)。 默認值稱為`jet`。 有很多其他方案可以選擇。 ```py In [9]: plt.imshow(lum_img, cmap="hot") ``` ![](http://matplotlib.org/_images/image_tutorial-3.png) 請注意,你還可以使用`set_cmap()`方法更改現有繪圖對象上的顏色: ```py In [10]: imgplot = plt.imshow(lum_img) In [11]: imgplot.set_cmap('spectral') ``` ![](http://matplotlib.org/_images/image_tutorial-4.png) > 注 > 但是,請記住,在帶有內聯后端的 IPython notebook 中,你不能對已經渲染的繪圖進行更改。 如果你在一個單元格中創建了`imgplot`,你不能在以后的單元格中調用`set_cmap()`,并且改變前面的繪圖。 請確保你在相同單元格中一起輸入這些命令。`plt`命令不會更改先前單元格的繪圖。 有許多可選的其它顏色表,請見[顏色表的列表和圖像](http://matplotlib.org/examples/color/colormaps_reference.html)。 ### 顏色刻度參考 了解顏色代表什么值對我們很有幫助。 我們可以通過添加顏色條來做到這一點。 ```py In [12]: imgplot = plt.imshow(lum_img) In [13]: plt.colorbar() ``` ![](http://matplotlib.org/_images/image_tutorial-5.png) 這會為你現有的圖形添加一個顏色條。 如果你更改并切換到不同的顏色映射,則不會自動更改 - 你必須重新創建繪圖,并再次添加顏色條。 ### 檢查特定數據范圍 有時,你想要增強圖像的對比度,或者擴大特定區域的對比度,同時犧牲變化不大,或者無所謂的顏色細節。 找到有趣區域的最好工具是直方圖。 要創建我們的圖像數據的直方圖,我們使用`hist()`函數。 ```py In [14]: plt.hist(lum_img.ravel(), bins=256, range=(0.0, 1.0), fc='k', ec='k') ``` ![](http://matplotlib.org/_images/image_tutorial-6.png) 通常,圖像的『有趣』部分在峰值附近,你可以通過剪切峰值上方和/或下方的區域獲得額外的對比度。 在我們的直方圖中,看起來最大值處沒有太多有用的信息(圖像中有很多不是白色的東西)。 讓我們調整上限,以便我們有效地『放大』直方圖的一部分。 我們通過將`clim`參數傳遞給`imshow`來實現。 你也可以通過對圖像繪圖對象調用`set_clim()`方法來做到這一點,但要確保你在使用 IPython Notebook 的時候,和`plot`命令在相同的單元格中執行 - 它不會改變之前單元格的圖。 ```py In [15]: imgplot = plt.imshow(lum_img, clim=(0.0, 0.7)) ``` ![](http://matplotlib.org/_images/image_tutorial-7.png) ### 數組插值方案 插值根據不同的數學方案計算像素『應有』的顏色或值。 發生這種情況的一個常見的場景是調整圖像的大小。 像素的數量會發生變化,但你想要相同的信息。 由于像素是離散的,因此存在缺失的空間。 插值就是填補這個空間的方式。 這就是當你放大圖像時,你的圖像有時會出來看起來像素化的原因。 當原始圖像和擴展圖像之間的差異較大時,效果更加明顯。 讓我們加載我們的圖像并縮小它。 我們實際上正在丟棄像素,只保留少數幾個像素。 現在,當我們繪制它時,數據被放大為你屏幕的大小。 由于舊的像素不再存在,計算機必須繪制像素來填充那個空間。 我們將使用用來加載圖像的 Pillow 庫來調整圖像大小。 ```py In [16]: from PIL import Image In [17]: img = Image.open('../_static/stinkbug.png') In [18]: img.thumbnail((64, 64), Image.ANTIALIAS) # resizes image in-place In [19]: imgplot = plt.imshow(img) ``` ![](http://matplotlib.org/_images/image_tutorial-8.png) 這里我們使用默認插值,雙線性,因為我們沒有向`imshow()`提供任何插值參數。 讓我們試試一些其它的東西: 最鄰近 ```py In [20]: imgplot = plt.imshow(img, interpolation="nearest") ``` ![](http://matplotlib.org/_images/image_tutorial-9.png) 雙立方 ```py In [21]: imgplot = plt.imshow(img, interpolation="bicubic") ``` ![](http://matplotlib.org/_images/image_tutorial-10.png) 雙立方插值通常用于放大照片 - 人們傾向于模糊而不是過度像素化。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看