Ⅰ '求助'python怎麼判斷圖片是否為灰度圖
不知道是搜索方法的問題還是自己不願意看文檔的問題,
總之本來想在Python的標准庫裡面找到一個可以判斷是否為灰度圖的標准庫函數,
但是死活找不到,當新問題的難度比舊問題難時,果斷回來解決舊問題,
那就是自己編寫一個,效率問題嘛,還是忽略一下,不考慮了
參考 怎麼讀取每個像素的RGB
這里判斷是否為灰度圖的標準是:每一個像素所對應的R、G、B的值是否相等。
Ⅱ python的pillow庫怎麼處理灰度圖像
Pillow是Python里的圖像處理庫(PIL:Python Image Library),提供了了廣泛的文件格式支持,強大的圖像處理能力,主要包括圖像儲存、圖像顯示、格式轉換以及基本的圖像處理操作等。
1)使用 Image 類
PIL最重要的類是 Image class, 你可以通過多種方法創建這個類的實例;你可以從文件載入圖像,或者處理其他圖像, 或者從 scratch 創建。
要從文件載入圖像,可以使用open( )函數,在Image模塊中:
>>> from PIL import Image
>>> im = Image.open("E:/photoshop/1.jpg")
載入成功後,將返回一個Image對象,可以通過使用示例屬性查看文件內容:
>>> print(im.format, im.size, im.mode)
('JPEG', (600, 351), 'RGB')
>>>
format 這個屬性標識了圖像來源。如果圖像不是從文件讀取它的值就是None。size屬性是一個二元tuple,包含width和height(寬度和高度,單位都是px)。 mode 屬性定義了圖像bands的數量和名稱,以及像素類型和深度。常見的modes 有 「L」 (luminance) 表示灰度圖像, 「RGB」 表示真彩色圖像, and 「CMYK」 表示出版圖像。
如果文件打開錯誤,返回 IOError 錯誤。
只要你有了 Image 類的實例,你就可以通過類的方法處理圖像。比如,下列方法可以顯示圖像:
im.show()
2)讀寫圖像
PIL 模塊支持大量圖片格式。使用在 Image 模塊的 open() 函數從磁碟讀取文件。你不需要知道文件格式就能打開它,這個庫能夠根據文件內容自動確定文件格式。要保存文件,使用 Image 類的 save() 方法。保存文件的時候文件名變得重要了。除非你指定格式,否則這個庫將會以文件名的擴展名作為格式保存。
載入文件,並轉化為png格式:
"Python Image Library Test"
from PIL import Image
import os
import sys
for infile in sys.argv[1:]:
f,e = os.path.splitext(infile)
outfile = f +".png"
if infile != outfile:
try:
Image.open(infile).save(outfile)
except IOError:
print("Cannot convert", infile)
save() 方法的第二個參數可以指定文件格式。
3)創建縮略圖
縮略圖是網路開發或圖像軟體預覽常用的一種基本技術,使用Python的Pillow圖像庫可以很方便的建立縮略圖,如下:
# create thumbnail
size = (128,128)
for infile in glob.glob("E:/photoshop/*.jpg"):
f, ext = os.path.splitext(infile)
img = Image.open(infile)
img.thumbnail(size,Image.ANTIALIAS)
img.save(f+".thumbnail","JPEG")
上段代碼對photoshop下的jpg圖像文件全部創建縮略圖,並保存,glob模塊是一種智能化的文件名匹配技術,在批圖像處理中經常會用到。
注意:Pillow庫不會直接解碼或者載入圖像柵格數據。當你打開一個文件,只會讀取文件頭信息用來確定格式,顏色模式,大小等等,文件的剩餘部分不會主動處理。這意味著打開一個圖像文件的操作十分快速,跟圖片大小和壓縮方式無關。
4)圖像的剪切、粘貼與合並操作
Image 類包含的方法允許你操作圖像部分選區,PIL.Image.Image.crop 方法獲取圖像的一個子矩形選區,如:
# crop, paste and merge
im = Image.open("E:/photoshop/lena.jpg")
box = (100,100,300,300)
region = im.crop(box)
矩形選區有一個4元元組定義,分別表示左、上、右、下的坐標。這個庫以左上角為坐標原點,單位是px,所以上訴代碼復制了一個 200×200 pixels 的矩形選區。這個選區現在可以被處理並且粘貼到原圖。
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)
當你粘貼矩形選區的時候必須保證尺寸一致。此外,矩形選區不能在圖像外。然而你不必保證矩形選區和原圖的顏色模式一致,因為矩形選區會被自動轉換顏色。
5)分離和合並顏色通道
對於多通道圖像,有時候在處理時希望能夠分別對每個通道處理,處理完成後重新合成多通道,在Pillow中,很簡單,如下:
r,g,b = im.split()
im = Image.merge("RGB", (r,g,b))
對於split( )函數,如果是單通道的,則返回其本身,否則,返回各個通道。
6)幾何變換
對圖像進行幾何變換是一種基本處理,在Pillow中包括resize( )和rotate( ),如用法如下:
out = im.resize((128,128))
out = im.rotate(45) # degree conter-clockwise
其中,resize( )函數的參數是一個新圖像大小的元祖,而rotate( )則需要輸入順時針的旋轉角度。在Pillow中,對於一些常見的旋轉作了專門的定義:
out = im.transpose(Image.FLIP_LEFT_RIGHT)
out = im.transpose(Image.FLIP_TOP_BOTTOM)
out = im.transpose(Image.ROTATE_90)
out = im.transpose(Image.ROTATE_180)
out = im.transpose(Image.ROTATE_270)
7)顏色空間變換
在處理圖像時,根據需要進行顏色空間的轉換,如將彩色轉換為灰度:
cmyk = im.convert("CMYK")
gray = im.convert("L")
8)圖像濾波
圖像濾波在ImageFilter 模塊中,在該模塊中,預先定義了很多增強濾波器,可以通過filter( )函數使用,預定義濾波器包括:
BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值濾波,CONTOUR找輪廓,FIND_EDGES邊緣檢測,使用該模塊時,需先導入,使用方法如下:
from PIL import ImageFilter
imgF = Image.open("E:/photoshop/lena.jpg")
outF = imgF.filter(ImageFilter.DETAIL)
conF = imgF.filter(ImageFilter.CONTOUR)
edgeF = imgF.filter(ImageFilter.FIND_EDGES)
imgF.show()
outF.show()
conF.show()
edgeF.show()
除此以外,ImageFilter模塊還包括一些擴展性強的濾波器:
class PIL.ImageFilter.GaussianBlur(radius=2)
Ⅲ 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)。坐標原點位於左上角。上面的例子提取的子區域包含300x300個像素。
該區域可以做接下來的處理然後再粘貼回去。
** 處理子區域然後粘貼回去 **
當往回粘貼時,區域的大小必須和參數匹配。另外區域不能超出圖像的邊界。然而原圖像和區域的顏色模式無需匹配。區域會自動轉換。
** 滾動圖像 **
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
http://www.liaoxuefeng.com/wiki//
Python 之 使用 PIL 庫做圖像處理
http://www.cnblogs.com/way_testlife/archive/2011/04/17/2019013.html
來自 http://effbot.org/imagingbook/introction.htm
Ⅳ python 用PIL打開TIFF格式圖片無法轉換為灰度圖是為什麼一直報錯,有代碼注釋,和錯誤截圖
It's either a bug or unimplemented in PIL/Pillow. Here is a workaround:
import Image
image = Image.open("Fredy1_002.tif")
image.mode = 'I'
image.point(lambda i:i*(1./256)).convert('L').save('my.jpeg')
Ⅳ python matlab畫灰度圖統計圖
個人意見,一個圖裡面,一個橫坐標你是想怎樣對應多個縱坐標值喃,你還需要一個標准在圖里表示某列里某個像素值的發布情況,就有3個變數,xyz軸3D圖應該更清晰,或者每列裡面的每個像素值在xy軸里有一個區間,類似表格,該區間的顏色表示發布多少情況。
Ⅵ Opencv用Python實現灰度圖
請題主把兩張圖上傳上來。具體方法:是上傳到網路網盤然後鏈接貼過來
Ⅶ '求助'Python怎麼判斷圖片是否為灰度圖
這里判斷是否為灰度圖的標準是:每一個像素所對應的R、G、B的值是否相等。
def is_color_image(url):
im=Image.open(url)
pix=im.convert('RGB')
width=im.size[0]
height=im.size[1]
oimage_color_type="Grey Image"
is_color=[]
for x in range(width):
for y in range(height):
r,g,b=pix.getpixel((x,y))
r=int(r)
g=int(g)
b=int(b)
if (r==g) and (g==b):
pass
else:
oimage_color_type='Color Image'
return oimage_color_type
Ⅷ python io. imread如何設置參數,使讀取的圖片為灰度圖
方法一:在使用OpenCV讀取圖片的同時將圖片轉換為灰度圖:
img = cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE)
print("cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE)結果如下:")
print('大小:{}'.format(img.shape))
print("類型:%s"%type(img))
print(img)
運行結果如下圖所示:
方法二:使用OpenCV,先讀取圖片,然後在轉換為灰度圖:
img = cv2.imread(imgfile)
#print(img.shape)
#print(img)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #Y = 0.299R + 0.587G + 0.114B
print("cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)結果如下:")
print('大小:{}'.format(gray_img.shape))
print("類型:%s" % type(gray_img))
print(gray_img)
運行結果如下:
方法三:使用PIL庫中的Image模塊:
img = np.array(Image.open(imgfile).convert('L'), 'f') #讀取圖片,灰度化,轉換為數組,L = 0.299R + 0.587G + 0.114B。'f'為float類型
print("Image方法的結果如下:")
print('大小:{}'.format(img.shape))
print("類型:%s" % type(img))
print(img)
Ⅸ python轉換灰度圖像,為什麼結果出來以後是發黃色的 圖一是彩圖轉換後的結果,圖二是代碼
imshow(im,cmap='gray')
Ⅹ 灰度圖圖像替換hsv中的v的Python實現,不要調用庫函數
也可以轉換為灰度圖像。 函數原型:void cvCvtColor( const CvArr* src, CvArr* dst, int code ); 參數: src 輸入的 8-bit,16-bit或 32-bit單倍精度