计算JES中的颜色像素(Jython)

时间:2017-09-12 11:35:30

标签: python jes

我试图拉出R,G,B,Black和&的总像素数。预制图片中的白色值。这张照片有100红色,100绿色,100蓝色,100黑色和100白色。

我已经开始使用我的代码,但出于某种原因,似乎我的代码只计算了1个像素.. Jython预定义了16种颜色,所以我使用的是红色,蓝色,绿色数据类型。

这是我到目前为止所做的:

def main():
 file = pickAFile( )
 pic = makePicture( file )

  pxRed = 0
  pxGreen = 0
  pxBlue = 0
  numR = 0
  numG = 0
  numB = 0

 printNow("Now let's count some pixels...")

 for px in getPixels( pic ):
   r = getRed(px)
   g = getGreen(px)
   b = getBlue(px)
   If px is (255,0,0): #error here
     numR += 1
     printNow("You have " + numR + " red pixels")
 show(pic)

不确定为什么这不起作用..

1 个答案:

答案 0 :(得分:1)

您不需要单独获取颜色。 您可以使用getColor(px) - 函数。

此外,python中没有函数printNow(str)。因此,只要此函数不是您使用的任何包的一部分,您就需要使用print(str)

函数getColor返回一个像Color(255,0,0)这样的对象来比较它,你不能只与一个元组进行比较,但想要使用JES中的distance函数。因此,您需要创建一个Color对象进行比较,例如red = makeColor(255,0,0),然后与此进行比较。 distance函数的可能输出范围从0(完全相同的颜色)到~441.7(黑色与白色相比)。

所以试试这样:

red = makeColor(255,0,0)
green = makeColor(0,255,0)
blue = makeColor(0,0,255)

for px in getPixels( pic ):
   color = getColor(px)
   if distance(color, red) == 0:
       numR += 1
   elif distance(color, green) == 0:
       numG += 1
   elif distance(color, blue) == 0:
       numB += 1

print("You have " + numR + " red pixels")
print("You have " + numG + " green pixels")
print("You have " + numB + " blue pixels")

我猜测你计算后需要总数。如果你想在迭代时输出数字,只需将打印放回循环中。