本文目錄一覽:
python進行圖像處理,剛開始就出現如下錯誤,請問應該怎麼解決
首先,檢查一下你是否有_imaging模塊。
在windows平台下看看有沒有_imaging.pyd文件(有些情況為_imaging.dll),我的目錄為C:\Python27\Lib\site-packages\PIL,在Unix下找個叫_imaging.so 或者_imagingmodule.so
的文件,有些Unix的平台的擴展名可能為.sl。
以下方法用於檢查目錄:
打開命令提示符輸入python -v ,再輸入import Image
另外一種方法是import sys,然後print sys.path
最後,如果到此都行,在交互模式下輸入import _imaging還提示
那你再檢查一下,安裝的PIL 是否跟你的電腦匹配,32位還是64位。重新安裝
圖像處理的Python問題,怎麼解決
imtools.py裏面也要有numpy 的引用才對
def histeq(im,nbr_bins=256):
“””對一幅灰度圖像進行直方圖均衡化”””
#計算圖像的直方圖
imhist,bins = histogram(im.flatten(),nbr_bins,normed=True)
cdf = imhist.cumsum() #累計分佈函數
cdf = 255 * cdf / cdf[-1] #歸一化
#使用累計分佈函數的線性插值,計算新的像素
im2 = interp(im.flatten(),bins[:-1],cdf)
return im2.reshape(im.shape),cdf
以上代碼我定義在imtools.py文件里並且放在了python2.7里
然後我在num.py里引用他
Python code?
1
2
3
4
5
6
7
8
9
10
from PIL import Image
from pylab import *
from numpy import *
import imtools
im= array(Image.open(‘E:\\daima\\pydaima\\shijue\\tupian1\\gang2.jpg’).convert(‘L’))
im2,cdf =imtools.histeq(im)
出現以下錯誤:
Traceback (most recent call last):
File “pyshell#56”, line 1, in module
a=imtools.histeq(im)
File “E:\daima\pydaima\shijue\imtools.py”, line 32, in histeq
NameError: global name ‘histogram’ is not defined
python:PIL圖像處理
PIL (Python Imaging Library)
Python圖像處理庫,該庫支持多種文件格式,提供強大的圖像處理功能。
PIL中最重要的類是Image類,該類在Image模塊中定義。
從文件加載圖像:
如果成功,這個函數返回一個Image對象。現在你可以使用該對象的屬性來探索文件的內容。
format 屬性指定了圖像文件的格式,如果圖像不是從文件中加載的則為 None 。
size 屬性是一個2個元素的元組,包含圖像寬度和高度(像素)。
mode 屬性定義了像素格式,常用的像素格式為:「L」 (luminance) – 灰度圖, 「RGB」 , 「CMYK」。
如果文件打開失敗, 將拋出IOError異常。
一旦你擁有一個Image類的實例,你就可以用該類定義的方法操作圖像。比如:顯示
( show() 的標準實現不是很有效率,因為它將圖像保存到一個臨時文件,然後調用外部工具(比如系統的默認圖片查看軟件)顯示圖像。該函數將是一個非常方便的調試和測試工具。)
接下來的部分展示了該庫提供的不同功能。
PIL支持多種圖像格式。從磁盤中讀取文件,只需使用 Image 模塊中的 open 函數。不需要提供文件的圖像格式。PIL庫將根據文件內容自動檢測。
如果要保存到文件,使用 Image 模塊中的 save 函數。當保存文件時,文件名很重要,除非指定格式,否則PIL庫將根據文件的擴展名來決定使用哪種格式保存。
** 轉換文件到JPEG **
save 函數的第二個參數可以指定使用的文件格式。如果文件名中使用了一個非標準的擴展名,則必須通過第二個參數來指定文件格式。
** 創建JPEG縮略圖 **
需要注意的是,PIL只有在需要的時候才加載像素數據。當你打開一個文件時,PIL只是讀取文件頭獲得文件格式、圖像模式、圖像大小等屬性,而像素數據只有在需要的時候才會加載。
這意味着打開一個圖像文件是一個非常快的操作,不會受文件大小和壓縮算法類型的影響。
** 獲得圖像信息 **
Image 類提供了某些方法,可以操作圖像的子區域。提取圖像的某個子區域,使用 crop() 函數。
** 複製圖像的子區域 **
定義區域使用一個包含4個元素的元組,(left, upper, right, lower)。坐標原點位於左上角。上面的例子提取的子區域包含300×300個像素。
該區域可以做接下來的處理然後再粘貼回去。
** 處理子區域然後粘貼回去 **
當往回粘貼時,區域的大小必須和參數匹配。另外區域不能超出圖像的邊界。然而原圖像和區域的顏色模式無需匹配。區域會自動轉換。
** 滾動圖像 **
paste() 函數有個可選參數,接受一個掩碼圖像。掩碼中255表示指定位置為不透明,0表示粘貼的圖像完全透明,中間的值表示不同級別的透明度。
PIL允許分別操作多通道圖像的每個通道,比如RGB圖像。 split() 函數創建一個圖像集合,每個圖像包含一個通道。 merge() 函數接受一個顏色模式和一個圖像元組,然後將它們合併為一個新的圖像。接下來的例子交換了一個RGB圖像的三個通道。
** 分離和合併圖像通道 **
對於單通道圖像, split() 函數返回圖像本身。如果想處理各個顏色通道,你可能需要先將圖像轉為RGB模式。
resize() 函數接受一個元組,指定圖像的新大小。
rotate() 函數接受一個角度值,逆時針旋轉。
** 基本幾何變換 **
圖像旋轉90度也可以使用 transpose() 函數。 transpose() 函數也可以水平或垂直翻轉圖像。
** transpose **
transpose() 和 rotate() 函數在性能和結果上沒有區別。
更通用的圖像變換函數為 transform() 。
PIL可以轉換圖像的像素模式。
** 轉換顏色模式 **
PIL庫支持從其他模式轉為「L」或「RGB」模式,其他模式之間轉換,則需要使用一個中間圖像,通常是「RGB」圖像。
ImageFilter 模塊包含多個預定義的圖像增強過濾器用於 filter() 函數。
** 應用過濾器 **
point() 函數用於操作圖像的像素值。該函數通常需要傳入一個函數對象,用於操作圖像的每個像素:
** 應用點操作 **
使用以上技術可以快速地對圖像像素應用任何簡單的表達式。可以結合 point() 函數和 paste 函數修改圖像。
** 處理圖像的各個通道 **
注意用於創建掩碼圖像的語法:
Python計算邏輯表達式採用短路方式,即:如果and運算符左側為false,就不再計算and右側的表達式,而且返回結果是表達式的結果。比如 a and b 如果a為false則返回a,如果a為true則返回b,詳見Python語法。
對於更多高級的圖像增強功能,可以使用 ImageEnhance 模塊中的類。
可以調整圖像對比度、亮度、色彩平衡、銳度等。
** 增強圖像 **
PIL庫包含對圖像序列(動畫格式)的基本支持。支持的序列格式包括 FLI/FLC 、 GIF 和一些實驗性的格式。 TIFF 文件也可以包含多個幀。
當打開一個序列文件時,PIL庫自動加載第一幀。你可以使用 seek() 函數 tell() 函數在不同幀之間移動。
** 讀取序列 **
如例子中展示的,當序列到達結尾時,將拋出EOFError異常。
注意當前版本的庫中多數底層驅動只允許seek到下一幀。如果想回到前面的幀,只能重新打開圖像。
以下迭代器類允許在for語句中循環遍歷序列:
** 一個序列迭代器類 **
PIL庫包含一些函數用於將圖像、文本打印到Postscript打印機。以下是一個簡單的例子。
** 打印到Postscript **
如前所述,可以使用 open() 函數打開圖像文件,通常傳入一個文件名作為參數:
如果打開成功,返回一個Image對象,否則拋出IOError異常。
也可以使用一個file-like object代替文件名(暫可以理解為文件句柄)。該對象必須實現read,seek,tell函數,必須以二進制模式打開。
** 從文件句柄打開圖像 **
如果從字符串數據中讀取圖像,使用StringIO類:
** 從字符串中讀取 **
如果圖像文件內嵌在一個大文件里,比如 tar 文件中。可以使用ContainerIO或TarIO模塊來訪問。
** 從tar文檔中讀取 **
** 該小節不太理解,請參考原文 **
有些解碼器允許當讀取文件時操作圖像。通常用於在創建縮略圖時加速解碼(當速度比質量重要時)和輸出一個灰度圖到激光打印機時。
draft() 函數。
** Reading in draft mode **
輸出類似以下內容:
注意結果圖像可能不會和請求的模式和大小匹配。如果要確保圖像不大於指定的大小,請使用 thumbnail 函數。
Python2.7 教程 PIL
Python 之 使用 PIL 庫做圖像處理
來自
怎樣使用Python圖像處理
Python圖像處理是一種簡單易學,功能強大的解釋型編程語言,它有簡潔明了的語法,高效率的高層數據結構,能夠簡單而有效地實現面向對象編程,下文進行對Python圖像處理進行說明。
當然,首先要感謝「戀花蝶」,是他的文章「用Python圖像處理 」 幫我堅定了用Python和PIL解決問題的想法,對於PIL的一些介紹和基本操作,可以看看這篇文章。我這裡主要是介紹點我在使用過程中的經驗。
PIL可以對圖像的顏色進行轉換,並支持諸如24位彩色、8位灰度圖和二值圖等模式,簡單的轉換可以通過Image.convert(mode)函數完 成,其中mode表示輸出的顏色模式。例如”L”表示灰度,”1”表示二值圖模式等。
但是利用convert函數將灰度圖轉換為二值圖時,是採用固定的閾 值127來實現的,即灰度高於127的像素值為1,而灰度低於127的像素值為0。為了能夠通過自定義的閾值實現灰度圖到二值圖的轉換,就要用到 Image.point函數。
深度剖析Python語法功能
深度說明Python應用程序特點
對Python數據庫進行學習研究
Python開發人員對Python經驗之談
對Python動態類型語言解析
Image.point函數有多種形式,這裡只討論Image.point(table, mode),利用該函數可以通過查表的方式實現像素顏色的模式轉換。其中table為顏色轉換過程中的映射表,每個顏色通道應當有256個元素,而 mode表示所輸出的顏色模式,同樣的,”L”表示灰度,”1”表示二值圖模式。
可見,轉換過程的關鍵在於設計映射表,如果只是需要一個簡單的箝位值,可以將table中高於或低於箝位值的元素分別設為1與0。當然,由於這裡的table並沒有什麼特殊要求,所以可以通過對元素的特殊設定實現(0, 255)範圍內,任意需要的一對一映射關係。
示例代碼如下:
import Image # load a color image im = Image.open(”fun.jpg”) # convert to grey level image Lim = im.convert(”L”) Lim.save(”fun_Level.jpg”) # setup a converting table with constant threshold threshold = 80 table = [] for i in range(256): if i threshold: table.append(0) else: table.append(1) # convert to binary image by the table bim = Lim.point(table, ”1”) bim.save(”fun_binary.jpg”)
IT部分通常要完成的任務相當繁重但支撐這些工作的資源卻很少,這已經成為公開的秘密。任何承諾提高編碼效率、降低軟件總成本的IT解決方案都應該進行 周到的考慮。Python圖像處理所具有的一個顯著優勢就是可以在企業的軟件創建和維護階段節約大量資金,而這兩個階段的軟件成本佔到了軟件整個生命周期中總成本 的50%到95%。
Python清晰可讀的語法使得軟件代碼具有異乎尋常的易讀性,甚至對那些不是最初接觸和開發原始項目的程序員都 能具有這樣的強烈感覺。雖然某些程序員反對在Python代碼中大量使用空格。
不過,幾乎人人都承認Python圖像處理的可讀性遠勝於C或者Java,後兩 者都採用了專門的字符標記代碼塊結構、循環、函數以及其他編程結構的開始和結束。提倡Python的人還宣稱,採用這些字符可能會產生顯著的編程風格差 異,使得那些負責維護代碼的人遭遇代碼可讀性方面的困難。轉載
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/185337.html