『壹』 python圖像處理
創建一個簡單的圖像與圖像混合
1.1 在Image模塊中,提供了創建圖像的方法。主要是通過**Image.new(mode, size, color)**實現,該方法傳入三個參數:
mode:圖像的創建模式
size:圖像的大小
color:圖像的顏色
用該方法可以創建一個簡單的圖像,之後我們可以通過save方法將圖像保存:
1.2生成圖片如下
1.3 圖像混合
透明度混合
透明度混合主要是使用**Image中的blend(im1, im2, alpha)**方法,對該方法的解釋如下:
im1:Image對象,在混合的過程中,透明度設置為(1-apha)
im2:Image對象,在混合的過程中,透明度設置為(apha)
alpha:透明度,取值是0-1。當透明度為0是,顯示im1對象;當透明度為1時,顯示im2對象
代碼實現如下
1.4原圖和混合圖的對比
1.5 遮罩混合
通過Image.composite(im1, im2, mask)方法實現遮罩混合。三個參數都是Image對象,該方法的作用就是使用mask來混合im1和im2。
1.6im1、im2和遮罩混合效果對比如下
『貳』 如何安裝Python圖型處理庫Python Imaging Library
1、下載PIL的Source Kit(因為這個包支持全部平台) Imaging--1.1.6.tar.gz
2、解壓縮包 tar -zxvf Imaging-1.1.6.tar.gz
3、進入到解壓後的目錄 cd Imaging-1.1.6
4、Build pakage: python setup.py build_ext -i
5、測試; python selftest.py
6、安裝 python setup.py install
執行完上述操作後,可以直接在程序用使用 import Image進行使用PIL中的Image類!
『叄』 讀取圖片
python基礎——讀取圖片
圖像後綴名的轉換:
要注意的是:對於彩色圖像,不管其格式是png,還是bmp,或者jpg,
在PIL中 ,使用Image模塊的open()函數打開後,返回的圖像對象的模式都是毀型 RGB ,對於灰度圖像,不管其圖像格式是PNG,還是BMP,JPG,打開後,其模式為灰度L。
PNG BMP JPG彩色圖像格式之間的轉換:可以通過Image模塊的open函數和save函數,具體來說,在打開這些圖像時,PIL會將他們解碼成三通道的RGB圖像。用戶可以基於RGB進行處理。處理完畢後可以將其處理結果保存成PNG BMP JPG中任何格式。
PNG BMP JPG灰度圖像格式之間的轉換,同理也可以通過類似途徑,只是解碼後時模式為L的圖像。
python庫可以用來讀取圖片的庫
1. PIL.Image.open
無論是jpg還是png都能准確讀取,PIL.Image.open 不直接返回numpy對象,可以用numpy提供的函數進行轉換;
其他模塊都直接返回numpy.ndarray對象,通道順序為RGB,通道值得默認范圍為0-255。
拓展:
利用PIL中的Image函數讀取出來不是array格式,這時候需要用消困np.asarray() 或者np.array()函數 。
區別:np.array() 是深拷貝,np.asarray() 是淺拷貝
關於深拷貝和淺拷貝,這里給出一個說明:
Python 中的對象之間賦值時是按引用傳遞的,如果需要拷貝對象,需要使用標准庫中的模塊。
1. . 淺拷貝 只拷貝父對象,不會拷貝對象的內部的子對象。
2. .deep 深拷貝 拷貝對象及其子對象
一個很好的例子:
2. cv2.imread
使用opencv讀取圖像,直接返回numpy.ndarray 對象,通道順序為BGR ,注意是BGR,通道值默認范圍0-255
cv2.imread():讀入圖片,共兩個參數:第一個參數為要讀入的圖片文件名,第二個參數為如何讀取圖片(cv2.IMREAD_COLOR:讀入一副彩色圖片;cv2.IMREAD_GRAYSCALE:灰度圖片;cv2.IMREAD_UNCHANGED:讀入一幅圖片,並包括其alpha通道。)
cv2.imread()不能有中文路徑,否則讀取不出來
cv2.imread() 讀出來同樣是array形式,但是如果是單通道的圖,讀出來的是三通道的。
3. matplotlib.image.imread
用於顯示圖片matplotlib 用於讀取圖片並且讀取出來就是array格式
解決使用plt.savefig 保存圖片時一片空白 : 在plt.show() 之前調用 plt.savefig();
4. scipy.ndimage.imread
scipy.ndimage.imread(*args, **kwds) Use ``matplotlib.pyplot.imread`` instead.
Returns:imread:ndarray(多維數組)
5. scipy.misc.imread
scipy.misc.imread(name, flatten=False, mode=None)
Use ``imageio.imread`` instead.
返回:imread: ndarray。通過讀取圖像獲得的陣列 。讀出來是array 形式,並且按照(H,拿余念W,C)形式保存
4. skimage.io.imread
scikit-image和numpy,matplotlib,scikit-learn等包都是Scipy項目的成員,通用numpy數組作為基本數據格式。在python中載入包名為skimage:所得即為numpy數組。
io.imread讀出圖片格式是uint8(unsigned int);value是numpy array;圖像數據是以RGB的格式進行存儲的,通道值默認范圍0-255。
『肆』 python圖像處理庫 哪個好 知乎
1.scikit-image
scikit-image是一個開源的Python包,適用於numpy數組。它實現了用於研究,教育和工業應用的演算法和實用工具。即使是那些剛接觸Python生態系統的人,它也是一個相當簡單直接的庫。此代碼是由活躍的志願者社區編寫的,具有高質量和同行評審的性質。
2.Numpy
Numpy是Python編程的核心庫之一,並為數組提供支持。圖像本質上是包含數據點像素的標准Numpy數組。因此,我們可以通過使用基本的NumPy操作,例如切片、掩膜和花式索引,來修改圖像的像素值。可以使用skimage載入圖像並使用matplotlib顯示圖像。
3.Scipy
scipy是Python的另一個類似Numpy的核心科學模塊,可用於基本的圖像操作和處理任務。特別是子模塊scipy.ndimage,提供了在n維NumPy數組上操作的函數。該包目前包括線性和非線性濾波,二值形態學,B樣條插值和對象測量等功能函數。
4. PIL/Pillow
PIL是Python編程語言的一個免費庫,它支持打開、操作和保存許多不同的文件格式的圖像。然而,隨著2009年的最後一次發布,它的開發停滯不前。但幸運的是還有Pillow,一個PIL積極開發的且更容易安裝的分支,它能運行在所有主要的操作系統,並支持Python3。這個庫包含了基本的圖像處理功能,包括點運算、使用一組內置卷積核的濾波和色彩空間的轉換。
5.OpenCV-Python
OpenCV是計算機視覺應用中應用最廣泛的庫之一
。OpenCV-Python是OpenCV的python版API。OpenCV-Python的優點不只有高效,這源於它的內部組成是用C/C++編寫的,而且它還容易編寫和部署。這使得它成為執行計算密集型計算機視覺程序的一個很好的選擇。
6.SimpleCV
SimpleCV也是一個用於構建計算機視覺應用程序的開源框架。有了它,你就可以訪問幾個高性能的計算機視覺庫,如OpenCV,而且不需要先學習了解位深度、文件格式、顏色空間等。它的學習曲線大大小於OpenCV,正如它們的口號所說「計算機視覺變得簡單」。
7.Mahotas
Mahotas是另一個計算機視覺和圖像處理的Python庫。它包括了傳統的圖像處理功能例如濾波和形態學操作以及更現代的計算機視覺功能用於特徵計算,包括興趣點檢測和局部描述符。該介面是Python語言,適合於快速開發,但是演算法是用C語言實現的,並根據速度進行了調優。Mahotas庫速度快,代碼簡潔,甚至具有最小的依賴性。
8.SimpleITK
ITK或者Insight Segmentation and Registration
Toolkit是一個開源的跨平台系統,為開發人員提供了一套廣泛的圖像分析軟體工具
。其中,SimpleITK是建立在ITK之上的簡化層,旨在促進其在快速原型設計、教育、解釋語言中的應用。SimpleITK是一個圖像分析工具包,包含大量支持一般過濾操作、圖像分割和匹配的組件。SimpleITK本身是用C++寫的,但是對於包括Python以內的大部分編程語言都是可用的。
9.pgmagick
pgmagick是GraphicsMagick庫的一個基於python的包裝。GraphicsMagick圖像處理系統有時被稱為圖像處理的瑞士軍刀。它提供了一個具有強大且高效的工具和庫集合,支持以88種主要格式讀取、寫入和操作圖像。
10.Pycairo
Pycairo是圖像處理庫cairo的一組Python捆綁。Cairo是一個用於繪制矢量圖形的2D圖形庫。矢量圖形很有趣,因為它們在調整大小或轉換時不會失去清晰度。Pycairo是cairo的一組綁定,可用於從Python調用cairo命令。
『伍』 10 個 Python 圖像編輯工具
以下提到的這些 Python 工具在編輯圖像、操作圖像底層數據方面都提供了簡單直接的方法。
-- Parul Pandey
當今的世界充滿了數據,而圖像數據就是其中很重要的一部分。但只有經過處理和分析,提高圖像的質量,從中提取出有效地信息,才能利用到這些圖像數據。
常見的圖像處理操作包括顯示圖像,基本的圖像操作,如裁剪、翻轉、旋轉;圖像的分割、分類、特徵提取;圖像恢復;以及圖像識別等等。Python 作為一種日益風靡的科學編程語言,是這些圖像處理操作的最佳選擇。同時,在 Python 生態當中也有很多可以免費使用的優秀的圖像處理工具。
下文將介紹 10 個可以用於圖像處理任務的 Python 庫,它們在編輯圖像、查看圖像底層數據方面都提供了簡單直接的方法。
scikit-image 是一個結合 NumPy 數組使用的開源 Python 工具,它實現了可用於研究、教育、工業應用的演算法和應用程序。即使是對於剛剛接觸 Python 生態圈的新手來說,它也是一個在使用上足夠簡單的庫。同時它的代碼質量也很高,因為它是由一個活躍的志願者社區開發的,並且通過了 同行評審(peer review)。
scikit-image 的 文檔 非常完善,其中包含了豐富的用例。
可以通過導入 skimage 使用,大部分的功能都可以在它的子模塊中找到。
圖像濾波(image filtering):
使用 match_template() 方法實現 模板匹配(template matching):
在 展示頁面 可以看到更多相關的例子。
NumPy 提供了對數組的支持,是 Python 編程的一個核心庫。圖像的本質其實也是一個包含像素數據點的標准 NumPy 數組,因此可以通過一些基本的 NumPy 操作(例如切片、 掩膜(mask)、 花式索引(fancy indexing)等),就可以從像素級別對圖像進行編輯。通過 NumPy 數組存儲的圖像也可以被 skimage 載入並使用 matplotlib 顯示。
在 NumPy 的 官方文檔 中提供了完整的代碼文檔和資源列表。
使用 NumPy 對圖像進行 掩膜(mask)操作:
像 NumPy 一樣, SciPy 是 Python 的一個核心科學計算模塊,也可以用於圖像的基本操作和處理。尤其是 SciPy v1.1.0 中的 scipy.ndimage 子模塊,它提供了在 n 維 NumPy 數組上的運行的函數。SciPy 目前還提供了 線性和非線性濾波(linear and non-linear filtering)、 二值形態學(binary morphology)、 B 樣條插值(B-spline interpolation)、 對象測量(object measurements)等方面的函數。
在 官方文檔 中可以查閱到 scipy.ndimage 的完整函數列表。
使用 SciPy 的 高斯濾波 對圖像進行模糊處理:
PIL (Python Imaging Library) 是一個免費 Python 編程庫,它提供了對多種格式圖像文件的打開、編輯、保存的支持。但在 2009 年之後 PIL 就停止發布新版本了。幸運的是,還有一個 PIL 的積極開發的分支 Pillow ,它的安裝過程比 PIL 更加簡單,支持大部分主流的操作系統,並且還支持 Python 3。Pillow 包含了圖像的基礎處理功能,包括像素點操作、使用內置卷積內核進行濾波、顏色空間轉換等等。
Pillow 的 官方文檔 提供了 Pillow 的安裝說明自己代碼庫中每一個模塊的示例。
使用 Pillow 中的 ImageFilter 模塊實現圖像增強:
OpenCV(Open Source Computer Vision 庫)是計算機視覺領域最廣泛使用的庫之一, OpenCV-Python 則是 OpenCV 的 Python API。OpenCV-Python 的運行速度很快,這歸功於它使用 C/C++ 編寫的後台代碼,同時由於它使用了 Python 進行封裝,因此調用和部署的難度也不大。這些優點讓 OpenCV-Python 成為了計算密集型計算機視覺應用程序的一個不錯的選擇。
入門之前最好先閱讀 OpenCV2-Python-Guide 這份文檔。
使用 OpenCV-Python 中的 金字塔融合(Pyramid Blending)將蘋果和橘子融合到一起:
SimpleCV 是一個開源的計算機視覺框架。它支持包括 OpenCV 在內的一些高性能計算機視覺庫,同時不需要去了解 位深度(bit depth)、文件格式、 色彩空間(color space)之類的概念,因此 SimpleCV 的學習曲線要比 OpenCV 平緩得多,正如它的口號所說,「將計算機視覺變得更簡單」。SimpleCV 的優點還有:
官方文檔 簡單易懂,同時也附有大量的學慣用例。
文檔 包含了安裝介紹、示例以及一些 Mahotas 的入門教程。
Mahotas 力求使用少量的代碼來實現功能。例如這個 Finding Wally 游戲 :
ITK (Insight Segmentation and Registration Toolkit)是一個為開發者提供普適性圖像分析功能的開源、跨平台工具套件, SimpleITK 則是基於 ITK 構建出來的一個簡化層,旨在促進 ITK 在快速原型設計、教育、解釋語言中的應用。SimpleITK 作為一個圖像分析工具包,它也帶有 大量的組件 ,可以支持常規的濾波、圖像分割、 圖像配准(registration)功能。盡管 SimpleITK 使用 C++ 編寫,但它也支持包括 Python 在內的大部分編程語言。
有很多 Jupyter Notebooks 用例可以展示 SimpleITK 在教育和科研領域中的應用,通過這些用例可以看到如何使用 Python 和 R 利用 SimpleITK 來實現互動式圖像分析。
使用 Python + SimpleITK 實現的 CT/MR 圖像配准過程:
pgmagick 是使用 Python 封裝的 GraphicsMagick 庫。 GraphicsMagick 通常被認為是圖像處理界的瑞士軍刀,因為它強大而又高效的工具包支持對多達 88 種主流格式圖像文件的讀寫操作,包括 DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM、TIFF 等等。
pgmagick 的 GitHub 倉庫 中有相關的安裝說明、依賴列表,以及詳細的 使用指引 。
圖像縮放:
邊緣提取:
Cairo 是一個用於繪制矢量圖的二維圖形庫,而 Pycairo 是用於 Cairo 的一組 Python 綁定。矢量圖的優點在於做大小縮放的過程中不會丟失圖像的清晰度。使用 Pycairo 可以在 Python 中調用 Cairo 的相關命令。
Pycairo 的 GitHub 倉庫 提供了關於安裝和使用的詳細說明,以及一份簡要介紹 Pycairo 的 入門指南 。
使用 Pycairo 繪制線段、基本圖形、 徑向漸變(radial gradients):
以上就是 Python 中的一些有用的圖像處理庫,無論你有沒有聽說過、有沒有使用過,都值得試用一下並了解它們。
via: https://opensource.com/article/19/3/python-image-manipulation-tools
作者: Parul Pandey 選題: lujun9972 譯者: HankChow 校對: wxy
『陸』 Python如何圖像識別
首先,先定位好問題是屬於圖像識別任務中的哪一類,最好上傳一張植物葉子的圖片。因為目前基於深度學習的卷積神經網路(CNN)確實在圖像識別任務中取得很好的效果,深度學習屬於機器學習,其研究的範式,或者說處理圖像的步驟大體上是一致的。
1、第一步,准備好數據集,這里是指,需要知道輸入、輸出(視任務而定,針對你這個問題,建議使用有監督模型)是什麼。你可以准備一個文件夾,裡面存放好植物葉子的圖像,而每張圖像對應一個標簽(有病/沒病,或者是多類別標簽,可能具體到哪一種病)。
具體實現中,會將數據集分為三個:訓練集(計算模型參數)、驗證集(調參,這個經常可以不需要實現劃分,在python中可以用scikit-learn中的函數解決。測試集用於驗證模型的效果,與前面兩個的區別是,模型使用訓練集和驗證集時,是同時使用了輸入數據和標簽,而在測試階段,模型是用輸入+模型參數,得到的預測與真實標簽進行對比,進而評估效果。
2、確定圖像識別的任務是什麼?
圖像識別的任務可以分為四個:圖像分類、目標檢測、語義分割、實例分割,有時候是幾個任務的結合。
圖像分類是指以圖像為輸入,輸出對該圖像內容分類的描述,可以是多分類問題,比如貓狗識別。通過足夠的訓練數據(貓和狗的照片-標簽,當然現在也有一系列的方法可以做小樣本訓練,這是細節了,這里並不敞開講),讓計算機/模型輸出這張圖片是貓或者狗,及其概率。當然,如果你的訓練數據還有其它動物,也是可以的,那就是圖像多分類問題。
目標檢測指將圖像或者視頻中的目標與不感興趣的部分區分開,判斷是否存在目標,並確定目標的具體位置。比如,想要確定這只狗所佩戴的眼睛的位置,輸入一張圖片,輸出眼睛的位置(可視化後可以講目標區域框出來)。
看到這里,應該想想植物葉子診斷疾病的問題,只需要輸入一整張植物葉子的圖片,輸出是哪種疾病,還是需要先提取葉子上某些感興趣區域(可能是病變區域),在用病變區域的特徵,對應到具體的疾病?
語義分割是當今計算機視覺領域的關鍵問題之一,宏觀上看,語義分割是一項高層次的任務。其目的是以一些原始圖像作為輸入,輸出具有突出顯示的感興趣的掩膜,其實質上是實現了像素級分類。對於輸入圖片,輸出其舌頭區域(注意可以是不規則的,甚至不連續的)。
而實例分割,可以說是在語義分割的基礎上,在像素層面給出屬於每個實例的像素。
看到這里,可以具體思考下自己的問題是對應其中的哪一類問題,或者是需要幾種任務的結合。
3、實際操作
可以先通過一個簡單的例子入手,先了解構建這一個框架需要准備什麼。手寫數字識別可以說是深度學習的入門數據集,其任務也經常作為該領域入門的案例,也可以自己在網上尋找。