如何循环所有图像像素并判断它们是黑色还是白色

2024-04-25 22:53:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的只有黑白的gif图像(比如说400x400px)。

我需要从图像中获取所有像素,并找出它们是黑色还是白色。我需要创建一个字典,里面有像素和颜色的信息。

我对python还不太熟悉,所以我有点纠结于此。但到目前为止我的剧本是这样写的:

#!/usr/bin/env python

import os
import Image

os.chdir("D:/python-projects")
aImage = Image.open("input.gif")

aPixelsBlackOrWhiteDictionary = {}
# now I need to fill the dictionary with values such as
# "X,Y": 0
# "X,Y": 1
# where X,Y are coordinates and 0/1 i the pixel color (b/w)

基本上我希望最终的字典是这样的:

"0,0" : 0 # pixel with X=0,Y=0 coordinates is black
"1,0" : 1 # pixel with X=1,Y=0 coordinates is White

编辑:

当我尝试:

print aImage[0, 0]

我得到一个错误:

Traceback (most recent call last):
  File "D:\python-projects\backprop.py", line 15, in <module>
    print aImage[0, 0]
  File "C:\Python26\lib\site-packages\pil-1.1.7-py2.6-win32.egg\Image.py", line
512, in __getattr__
    raise AttributeError(name)
AttributeError: __getitem__

Tags: the图像imageimport字典isoswith
3条回答

尝试:

pix = aImage.load()
print pix[x, y]

还要注意,可以使用元组作为字典键,可以使用mydict[(x,y)],而不是mydict[“x,y”]。

该像素信息已经存储在图像中,为什么要将其存储在dict中?

如果你想看看拇指是不是单核细胞增多症,你可以试试这个:

def is_mono(image, variance=5):
    img_dta = list(im.getdata())   
    colour_test = lambda r,g,b : abs(r-g) > variance or abs(g-b) > variance
    if any([colour_test(r,g,b) for (r,g,b) in img_dta]):  return False
    return True

url1 = 'http://farm5.static.flickr.com/4145/5090947066_0d9d45edf4_s.jpg' # Mono
url2 = 'http://farm5.static.flickr.com/4087/5090362043_03c2da75d4_s.jpg' # Colour
for url in (url1, url2):
    dta = urllib.urlopen(url).read()
    im = Image.open(StringIO(dta))
    print is_mono(im)

>

True
False

您应该使用getpixel,而不是使用索引运算符。注意,这可能非常缓慢。最好使用getdata,它将所有像素作为序列返回。

See http://effbot.org/imagingbook/image.htm .

相关问题 更多 >