我使用Python3.3的枕头,对于我拥有的每一幅图像,我想分析所有像素的颜色,并计算每种颜色是最接近白色还是最接近黑色。我用欧几里得距离,用这个公式:
>>>a,b=(127,255) #color value of pixel at position (1,1)
>>>whitedist=sqrt((a-255)**2 + (b-255)**2)
>>>print (whitedist)
128.0像素有两个值,因为我正在处理灰度图像。问题是,对于128x128图像的每个像素,我当然不能这样做,所以我尝试写我的第一个循环:
colors=im.getdata() #all pixel values
for item in col:
for item in range (0, 127):
print ("B") #if the value is between 0 and 127 the color is nearer to black这是一个完全愚蠢的尝试,蟒蛇进入了一个无限循环,我不得不放弃它。我的问题是,我对该做什么有一个粗略的想法,但我不太了解python,无法将我的推理转换成代码。我认为我的推理并非完全错误,但我无法找到将其转换为代码的方法。
由于list(im.getdata())返回一个元组列表,每个像素包含两个值,我认为应该对每个元组应用公式whitedist=sqrt((a-255)**2 + (b-255)**2),如果公式的结果是<128个,则将像素标记为“黑暗”,如果>128个则将像素标记为“光”,则需要计数所有的暗像素和亮像素,并查看图像是否有更多的暗像素或亮像素。
用循环来做这件事完全不对吗?
发布于 2014-12-23 12:57:19
试试这个:
colors = im.getdata() #all pixel values
# initialize lists for dark and light pixels
darkList=[]
lightList=[]
# set counter for dark and light pixels
dark = 0
light = 0
for item in colors: # iterate over each tuple
if sqrt((item[0]-255)**2 + (item[1]-255)**2) < 128: # See if Euclidean distance is less than 128
lightList.append(item) # append pixel to light pixel list
light+=1 # increment light pixel counter
else:
darkList.append(item) # append pixel to dark pixel list
dark+=1 # increment dark pixel counter
print("Total light pixels =",light)
print(lightList)
print("Total dark pixels =",dark)
print(darkList)发布于 2014-12-23 13:01:57
使用getdata,您将检索所有像素,因此如果图像大小为128x128,则意味着16384像素。正如您所提到的,这些值以可变颜色存储为16384值。
您可以只使用一个循环来遍历完整的值:
for item in colors:
whitedist=sqrt((item[0]-255)**2 + (item[1]-255)**2)
if whitedist <= 128:
darkPixels++
else:
lightPixels++ 如果你知道颜色是如何表示的,你就可以像你提到的那样计算欧几里德距离。请注意,如果值为128,则没有指定要做什么,以及如何存储标记。如果只需要知道有多少像素是暗的还是光的,你可以使用上面的例子。
https://stackoverflow.com/questions/27620384
复制相似问题