簡體   English   中英

使用PPM文件在python中將圖像轉換為ASCII。 PIL不允許

[英]Image to ASCII in python using a PPM file. PIL not allowed

需要一個項目的幫助/方向。 我們的任務是獲取.ppm文件(我們需要測試的文件在這里找到: http//beastie.cs.ua.edu/cs250/projects/asciiart/tux.ppm )並重新打印出來屏幕使用ascii字符。 我們需要將像素轉換為灰度。 這真的是我陷入困境的地方。 無法弄清楚如何讀取每三個元素(因為每三個元素是PPM文件中的一個像素),將它們轉換為灰度並繼續前進。 再次PIL是不允許的。 任何有關閱讀內容的幫助或鏈接都會很棒!

PPM並不難解析。

標題:

P3
50 50
255
  • P3表示圖像是ASCII像素圖(顏色)。
  • 50 50是寬度和高度。
  • 255是最大顏色值。

身體:

254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 
254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 
254 254 252 254 254 252 254 254 252 253 255 250 239 244 237 251 255 248 
234 236 231 255 255 251 252 251 249 255 254 251 253 248 242 255 255 244 
...

只需刪除所有換行符:

body.replace('\n', ' ')

並用三元組解析(不太優雅):

raw = body.split(' ')

for i in range(0, len(raw), 3):
  red = raw[i]
  green = raw[i + 1]
  blue = raw[i + 2]

讀取ppm文件,您可以這樣做:

# Open the PPM file and process the 3 first lines
f = open("tux.ppm")
color = f.readline().splitlines()
size_x, size_y = f.readline().split()
max = f.readline().splitlines()

你真的不需要知道文件的第3行。 您只需知道正在使用RGB圖像,這意味着每個像素有3個值(0-255)。

要將圖像轉換為灰度,您有兩個選擇:您可以生成另一個PPM文件(每個像素有3個值),也可以生成與PPM格式相同的PGM文件,但第一行是P2而不是P3和每個像素只有一個值(這是很酷的方式)。

要在一個灰度強度值中轉換RGB顏色值(r,g,b),您可以應用此公式(優於簡單應用平均值):

0.21*r + 0.71*g + 0.07*b

使用每個像素一個值生成灰度圖像(如果您想要3個值,則只需對r,g,b重復3次):

# Getting the image data (if you have read the 3 first lines...)
data = f.read().split()

# Generate a new array of pixels with grayscale values (1 per pixel)
gray_data = [0.21*data[i] + 0.71*data[i+1] + 0.07*data[i+2] for i in range(0,len(data),3)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM