首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算列表中每个项目的欧几里德距离

计算列表中每个项目的欧几里德距离
EN

Stack Overflow用户
提问于 2014-12-23 12:28:23
回答 2查看 1.6K关注 0票数 0

我使用Python3.3的枕头,对于我拥有的每一幅图像,我想分析所有像素的颜色,并计算每种颜色是最接近白色还是最接近黑色。我用欧几里得距离,用这个公式:

代码语言:javascript
复制
>>>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图像的每个像素,我当然不能这样做,所以我尝试写我的第一个循环:

代码语言:javascript
复制
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个则将像素标记为“光”,则需要计数所有的暗像素和亮像素,并查看图像是否有更多的暗像素或亮像素。

用循环来做这件事完全不对吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-23 12:57:19

试试这个:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2014-12-23 13:01:57

使用getdata,您将检索所有像素,因此如果图像大小为128x128,则意味着16384像素。正如您所提到的,这些值以可变颜色存储为16384值。

您可以只使用一个循环来遍历完整的值:

代码语言:javascript
复制
for item in colors:
  whitedist=sqrt((item[0]-255)**2 + (item[1]-255)**2)
  if whitedist <= 128:
     darkPixels++
  else:
     lightPixels++  

如果你知道颜色是如何表示的,你就可以像你提到的那样计算欧几里德距离。请注意,如果值为128,则没有指定要做什么,以及如何存储标记。如果只需要知道有多少像素是暗的还是光的,你可以使用上面的例子。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27620384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档