python函數(shù)圖像顏色 python圖形顏色代碼

python顏色壓縮的結(jié)果顏色比保存顏色深

今天幫師姐解決一個(gè)bug,測(cè)試了Python圖像resize前后顏色不一致問(wèn)題。

宜良網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司于2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。

代碼片段執(zhí)行的功能:圖像指定倍數(shù)超分辨率,輸入為[0-1] float型數(shù)據(jù),輸出為格式不限的圖像

bug:輸入圖像與輸出圖像顏色不一致

一、把產(chǎn)生bug的功能片段做分離測(cè)試:

1 import h5py

2 import numpy as np

3 import matplotlib.pyplot as plt

4 from PIL import Image

5 from scipy import misc

6

7

8 def get_result_array():

9 file_name = "./butterfly_GT.bmp"

10 img_no_expand = misc.imread(file_name, flatten=False, mode='YCbCr')

11 img_no_expand = img_no_expand / 255.0

12 # img_no_expand = np.uint8(img_no_expand*255)

13 h, w = img_no_expand.shape[:2]

14 print(img_no_expand.shape)

15 h *= 2

16 w *= 2

17 data = list()

18

19 data.append(misc.imresize(img_no_expand[:, :, 0], [h, w], 'bicubic')[:,:,None])

20 data.append(misc.imresize(img_no_expand[:, :, 1], [h, w], 'bicubic')[:,:,None])

21 data.append(misc.imresize(img_no_expand[:, :, 2], [h, w], 'bicubic')[:,:,None])

22 data_out = np.concatenate(data, axis=2)

23 img = misc.toimage(arr=data_out, mode="YCbCr")

24 img.save("out_3.jpg")

25

26

27 if __name__=='__main__':

28 get_result_array()

運(yùn)行代碼:

左圖為輸入圖像,右圖為輸出圖像。為了便于對(duì)比,把輸出圖像縮放至與輸入圖像一致,由圖可見(jiàn),輸出圖像色彩嚴(yán)重失真。

二、在pycharm中,Ctrl+B 查看源碼:

三、發(fā)現(xiàn)可以選擇模式,猜想可能是模式有誤:

四、在函數(shù)的實(shí)現(xiàn)的第一行,初始化Image類(lèi),猜想初始化參數(shù)設(shè)置錯(cuò)誤。

五、在類(lèi)的初始化過(guò)程中,默認(rèn)圖像的最大值為255,而實(shí)際輸入是0-1的float型數(shù)據(jù)。找到了錯(cuò)誤之處。

六、仔細(xì)查看文檔,mode可以修改。0-1float型數(shù)據(jù)對(duì)應(yīng)mode=“F”:

七、于是,在代碼中加入?yún)?shù):

八、插值后處理

插值之后部分像素點(diǎn)數(shù)值可能大于1,這時(shí)有兩種做法,一種是歸一化,一種是截?cái)唷=?jīng)過(guò)實(shí)驗(yàn)發(fā)現(xiàn),歸一化操作往往會(huì)使圖像整體亮度變暗,對(duì)圖像整體視覺(jué)效果有較大影響,因此這里選擇截?cái)唷?/p>

九、最終代碼如下:

1 import h5py

2 import numpy as np

3 import matplotlib.pyplot as plt

4 from PIL import Image

5 from scipy import misc

6

7

8 def get_result_array():

9 file_name = "./butterfly_GT.bmp"

10 img_no_expand = misc.imread(file_name, flatten=False, mode='YCbCr')

11 img_no_expand = img_no_expand / 255.0

12 # img_no_expand = np.uint8(img_no_expand*255)

13 h, w = img_no_expand.shape[:2]

14 print(img_no_expand.shape)

15 h *= 2

16 w *= 2

17 data = list()

18 data.append(misc.imresize(img_no_expand[:, :, 0], [h, w], 'bicubic', mode="F")[:,:,None])

19 data.append(misc.imresize(img_no_expand[:, :, 1], [h, w], 'bicubic', mode="F")[:,:,None])

20 data.append(misc.imresize(img_no_expand[:, :, 2], [h, w], 'bicubic', mode="F")[:,:,None])

21 data_out = np.concatenate(data, axis=2)

22 data_out[data_out 1] = 1.0

23 data_out = np.uint8(data_out * 255)

24 img = misc.toimage(arr=data_out, mode="YCbCr")

25 img.save("out_4.jpg")

26

27

28 if __name__=='__main__':

29 get_result_array()

python:PIL圖像處理

PIL (Python Imaging Library)

Python圖像處理庫(kù),該庫(kù)支持多種文件格式,提供強(qiáng)大的圖像處理功能。

PIL中最重要的類(lèi)是Image類(lèi),該類(lèi)在Image模塊中定義。

從文件加載圖像:

如果成功,這個(gè)函數(shù)返回一個(gè)Image對(duì)象?,F(xiàn)在你可以使用該對(duì)象的屬性來(lái)探索文件的內(nèi)容。

format 屬性指定了圖像文件的格式,如果圖像不是從文件中加載的則為 None 。

size 屬性是一個(gè)2個(gè)元素的元組,包含圖像寬度和高度(像素)。

mode 屬性定義了像素格式,常用的像素格式為:“L” (luminance) - 灰度圖, “RGB” , “CMYK”。

如果文件打開(kāi)失敗, 將拋出IOError異常。

一旦你擁有一個(gè)Image類(lèi)的實(shí)例,你就可以用該類(lèi)定義的方法操作圖像。比如:顯示

( show() 的標(biāo)準(zhǔn)實(shí)現(xiàn)不是很有效率,因?yàn)樗鼘D像保存到一個(gè)臨時(shí)文件,然后調(diào)用外部工具(比如系統(tǒng)的默認(rèn)圖片查看軟件)顯示圖像。該函數(shù)將是一個(gè)非常方便的調(diào)試和測(cè)試工具。)

接下來(lái)的部分展示了該庫(kù)提供的不同功能。

PIL支持多種圖像格式。從磁盤(pán)中讀取文件,只需使用 Image 模塊中的 open 函數(shù)。不需要提供文件的圖像格式。PIL庫(kù)將根據(jù)文件內(nèi)容自動(dòng)檢測(cè)。

如果要保存到文件,使用 Image 模塊中的 save 函數(shù)。當(dāng)保存文件時(shí),文件名很重要,除非指定格式,否則PIL庫(kù)將根據(jù)文件的擴(kuò)展名來(lái)決定使用哪種格式保存。

** 轉(zhuǎn)換文件到JPEG **

save 函數(shù)的第二個(gè)參數(shù)可以指定使用的文件格式。如果文件名中使用了一個(gè)非標(biāo)準(zhǔn)的擴(kuò)展名,則必須通過(guò)第二個(gè)參數(shù)來(lái)指定文件格式。

** 創(chuàng)建JPEG縮略圖 **

需要注意的是,PIL只有在需要的時(shí)候才加載像素?cái)?shù)據(jù)。當(dāng)你打開(kāi)一個(gè)文件時(shí),PIL只是讀取文件頭獲得文件格式、圖像模式、圖像大小等屬性,而像素?cái)?shù)據(jù)只有在需要的時(shí)候才會(huì)加載。

這意味著打開(kāi)一個(gè)圖像文件是一個(gè)非??斓牟僮鳎粫?huì)受文件大小和壓縮算法類(lèi)型的影響。

** 獲得圖像信息 **

Image 類(lèi)提供了某些方法,可以操作圖像的子區(qū)域。提取圖像的某個(gè)子區(qū)域,使用 crop() 函數(shù)。

** 復(fù)制圖像的子區(qū)域 **

定義區(qū)域使用一個(gè)包含4個(gè)元素的元組,(left, upper, right, lower)。坐標(biāo)原點(diǎn)位于左上角。上面的例子提取的子區(qū)域包含300x300個(gè)像素。

該區(qū)域可以做接下來(lái)的處理然后再粘貼回去。

** 處理子區(qū)域然后粘貼回去 **

當(dāng)往回粘貼時(shí),區(qū)域的大小必須和參數(shù)匹配。另外區(qū)域不能超出圖像的邊界。然而原圖像和區(qū)域的顏色模式無(wú)需匹配。區(qū)域會(huì)自動(dòng)轉(zhuǎn)換。

** 滾動(dòng)圖像 **

paste() 函數(shù)有個(gè)可選參數(shù),接受一個(gè)掩碼圖像。掩碼中255表示指定位置為不透明,0表示粘貼的圖像完全透明,中間的值表示不同級(jí)別的透明度。

PIL允許分別操作多通道圖像的每個(gè)通道,比如RGB圖像。 split() 函數(shù)創(chuàng)建一個(gè)圖像集合,每個(gè)圖像包含一個(gè)通道。 merge() 函數(shù)接受一個(gè)顏色模式和一個(gè)圖像元組,然后將它們合并為一個(gè)新的圖像。接下來(lái)的例子交換了一個(gè)RGB圖像的三個(gè)通道。

** 分離和合并圖像通道 **

對(duì)于單通道圖像, split() 函數(shù)返回圖像本身。如果想處理各個(gè)顏色通道,你可能需要先將圖像轉(zhuǎn)為RGB模式。

resize() 函數(shù)接受一個(gè)元組,指定圖像的新大小。

rotate() 函數(shù)接受一個(gè)角度值,逆時(shí)針旋轉(zhuǎn)。

** 基本幾何變換 **

圖像旋轉(zhuǎn)90度也可以使用 transpose() 函數(shù)。 transpose() 函數(shù)也可以水平或垂直翻轉(zhuǎn)圖像。

** transpose **

transpose() 和 rotate() 函數(shù)在性能和結(jié)果上沒(méi)有區(qū)別。

更通用的圖像變換函數(shù)為 transform() 。

PIL可以轉(zhuǎn)換圖像的像素模式。

** 轉(zhuǎn)換顏色模式 **

PIL庫(kù)支持從其他模式轉(zhuǎn)為“L”或“RGB”模式,其他模式之間轉(zhuǎn)換,則需要使用一個(gè)中間圖像,通常是“RGB”圖像。

ImageFilter 模塊包含多個(gè)預(yù)定義的圖像增強(qiáng)過(guò)濾器用于 filter() 函數(shù)。

** 應(yīng)用過(guò)濾器 **

point() 函數(shù)用于操作圖像的像素值。該函數(shù)通常需要傳入一個(gè)函數(shù)對(duì)象,用于操作圖像的每個(gè)像素:

** 應(yīng)用點(diǎn)操作 **

使用以上技術(shù)可以快速地對(duì)圖像像素應(yīng)用任何簡(jiǎn)單的表達(dá)式。可以結(jié)合 point() 函數(shù)和 paste 函數(shù)修改圖像。

** 處理圖像的各個(gè)通道 **

注意用于創(chuàng)建掩碼圖像的語(yǔ)法:

Python計(jì)算邏輯表達(dá)式采用短路方式,即:如果and運(yùn)算符左側(cè)為false,就不再計(jì)算and右側(cè)的表達(dá)式,而且返回結(jié)果是表達(dá)式的結(jié)果。比如 a and b 如果a為false則返回a,如果a為true則返回b,詳見(jiàn)Python語(yǔ)法。

對(duì)于更多高級(jí)的圖像增強(qiáng)功能,可以使用 ImageEnhance 模塊中的類(lèi)。

可以調(diào)整圖像對(duì)比度、亮度、色彩平衡、銳度等。

** 增強(qiáng)圖像 **

PIL庫(kù)包含對(duì)圖像序列(動(dòng)畫(huà)格式)的基本支持。支持的序列格式包括 FLI/FLC 、 GIF 和一些實(shí)驗(yàn)性的格式。 TIFF 文件也可以包含多個(gè)幀。

當(dāng)打開(kāi)一個(gè)序列文件時(shí),PIL庫(kù)自動(dòng)加載第一幀。你可以使用 seek() 函數(shù) tell() 函數(shù)在不同幀之間移動(dòng)。

** 讀取序列 **

如例子中展示的,當(dāng)序列到達(dá)結(jié)尾時(shí),將拋出EOFError異常。

注意當(dāng)前版本的庫(kù)中多數(shù)底層驅(qū)動(dòng)只允許seek到下一幀。如果想回到前面的幀,只能重新打開(kāi)圖像。

以下迭代器類(lèi)允許在for語(yǔ)句中循環(huán)遍歷序列:

** 一個(gè)序列迭代器類(lèi) **

PIL庫(kù)包含一些函數(shù)用于將圖像、文本打印到Postscript打印機(jī)。以下是一個(gè)簡(jiǎn)單的例子。

** 打印到Postscript **

如前所述,可以使用 open() 函數(shù)打開(kāi)圖像文件,通常傳入一個(gè)文件名作為參數(shù):

如果打開(kāi)成功,返回一個(gè)Image對(duì)象,否則拋出IOError異常。

也可以使用一個(gè)file-like object代替文件名(暫可以理解為文件句柄)。該對(duì)象必須實(shí)現(xiàn)read,seek,tell函數(shù),必須以二進(jìn)制模式打開(kāi)。

** 從文件句柄打開(kāi)圖像 **

如果從字符串?dāng)?shù)據(jù)中讀取圖像,使用StringIO類(lèi):

** 從字符串中讀取 **

如果圖像文件內(nèi)嵌在一個(gè)大文件里,比如 tar 文件中??梢允褂肅ontainerIO或TarIO模塊來(lái)訪(fǎng)問(wèn)。

** 從tar文檔中讀取 **

** 該小節(jié)不太理解,請(qǐng)參考原文 **

有些解碼器允許當(dāng)讀取文件時(shí)操作圖像。通常用于在創(chuàng)建縮略圖時(shí)加速解碼(當(dāng)速度比質(zhì)量重要時(shí))和輸出一個(gè)灰度圖到激光打印機(jī)時(shí)。

draft() 函數(shù)。

** Reading in draft mode **

輸出類(lèi)似以下內(nèi)容:

注意結(jié)果圖像可能不會(huì)和請(qǐng)求的模式和大小匹配。如果要確保圖像不大于指定的大小,請(qǐng)使用 thumbnail 函數(shù)。

Python2.7 教程 PIL

Python 之 使用 PIL 庫(kù)做圖像處理

來(lái)自

Python matplotlib之函數(shù)圖像繪制、線(xiàn)條rc參數(shù)設(shè)置

為避免中文顯示出錯(cuò),需導(dǎo)入matplotlib.pylab庫(kù)

1.2.1 確定數(shù)據(jù)

1.2.2 創(chuàng)建畫(huà)布

1.2.3 添加標(biāo)題

1.2.4 添加x,y軸名稱(chēng)

1.2.5 添加x,y軸范圍

1.2.6 添加x,y軸刻度

1.2.7 繪制曲線(xiàn)、圖例, 并保存圖片

保存圖片時(shí),dpi為清晰度,數(shù)值越高越清晰。請(qǐng)注意,函數(shù)結(jié)尾處,必須加plt.show(),不然圖像不顯示。

繪制流程與繪制不含子圖的圖像一致,只需注意一點(diǎn):創(chuàng)建畫(huà)布。

合理調(diào)整figsize、dpi,可避免出現(xiàn)第一幅圖橫軸名稱(chēng)與第二幅圖標(biāo)題相互遮蓋的現(xiàn)象.

2.2.1 rc參數(shù)類(lèi)型

2.2.2 方法1:使用rcParams設(shè)置

2.2.3 方法2:plot內(nèi)設(shè)置

2.2.4 方法3:plot內(nèi)簡(jiǎn)化設(shè)置

方法2中,線(xiàn)條形狀,linestyle可簡(jiǎn)寫(xiě)為ls;線(xiàn)條寬度,linewidth可簡(jiǎn)寫(xiě)為lw;線(xiàn)條顏色,color可簡(jiǎn)寫(xiě)為c,等等。

Python中用turtle畫(huà)的兩條線(xiàn)圍成的圖形怎么填充顏色?

你好,答案如下所示。

填充為黃色

填充效果

希望你能夠詳細(xì)查看。

如果你有不會(huì)的,你可以提問(wèn)

我有時(shí)間就會(huì)幫你解答。

希望你好好學(xué)習(xí)。

每一天都過(guò)得充實(shí)。

在python里,如何實(shí)現(xiàn)點(diǎn)擊開(kāi)始按鈕,開(kāi)始慢慢在不同位置出現(xiàn)不同顏色的不同圖形?

示例代碼

# 導(dǎo)入Tkinter模塊

from tkinter import *

# 創(chuàng)建一個(gè)窗口

window = Tk()

# 定義一個(gè)函數(shù),用來(lái)生成圖形

def generate_shape():

# 使用隨機(jī)數(shù)生成不同的圖形和顏色

shape = random.choice(["circle", "square", "triangle"])

color = random.choice(["red", "green", "blue"])

# 使用隨機(jī)數(shù)生成不同的位置

x = random.randint(0, 200)

y = random.randint(0, 200)

# 在窗口中繪制圖形

if shape == "circle":

# 繪制圓形

canvas.create_oval(x, y, x + 50, y + 50, fill=color)

elif shape == "square":

# 繪制正方形

canvas.create_rectangle(x, y, x + 50, y + 50, fill=color)

else:

# 繪制三角形

points = [x, y, x + 50, y + 50, x + 25, y + 75]

canvas.create_polygon(points, fill=color)

# 創(chuàng)建一個(gè)畫(huà)布

canvas = Canvas(window, width=200, height=200)

canvas.pack()

# 創(chuàng)建一個(gè)按鈕

button = Button(window, text="Start", command=generate_shape)

button.pack()

# 進(jìn)入消息循環(huán)

window.mainloop()

分享標(biāo)題:python函數(shù)圖像顏色 python圖形顏色代碼
當(dāng)前鏈接:http://muchs.cn/article8/docchop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、網(wǎng)站設(shè)計(jì)品牌網(wǎng)站設(shè)計(jì)、虛擬主機(jī)網(wǎng)站制作、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司