3

所以......通过SimpleCV 的实用计算机视觉一书,第 5 章 - 与此处的在线教程中的示例相同。黄色汽车的平均颜色得到了一个非常不同的值,所以我回顾了示例代码,插入了更多注释,添加了一些东西来显示(然后干净地关闭)每个阶段的图像。

from SimpleCV import Image
import time

# Load images.
car_in_lot = Image("parking-car.png")
car_not_in_lot = Image("parking-no-car.png")

# Crop image to region-of-interest.
car = car_in_lot.crop(470,200,200,200)
car.show()
time.sleep(5)
car.show().quit()

# Create greyscale image showing how far from yellow various colors are.
yellow_car = car.colorDistance(Color.YELLOW)
yellow_car.show()
time.sleep(5)
yellow_car.show().quit()

# Subtract greyscale image from cropped image to show just the yellow portions.
only_car = car - yellow_car
only_car.show()
time.sleep(5)
only_car.show().quit()

print only_car.meanColor()

它返回(0.6376000000000001, 2.096775, 5.170425), 而不是(25.604575, 18.880775, 4.4940750000000005)本书和教程中给出的结果。

裁剪后的停车位与汽车的第一张图像看起来不错……但灰度图像看起来很奇怪。我得到的图像旋转了 90 度,与示例中的图像完全不同。这是Dropbox 上的链接。

然后从那里...... colorDistance 离它应该是这么远......平均颜色值不正确。

colorDistance()关于为什么该步骤返回一个时髦的旋转灰度图像的任何想法或建议?

4

1 回答 1

1

colorDistance 似乎返回一个旋转的、翻转的图像。如果您进行快速转换,则可以避免此类麻烦。例如

x,y,w,h   = 470,200,200,200
cImg      = Image('parking-car.png')
ncImg     = Image('parking-no-car.png')
car       = cImg.crop(x,y,w,h)
ncar      = nImg.crop(x,y,w,h)
ycar      = car.colorDistance(Color.YELLOW).rotateRight().flipHorizontal()
nycar     = ncar.colorDistance(Color.YELLOW).rotateRight().flipHorizontal()
only_car  = car - ycar
nonly_car = ncar - nycar 
carmc     = only_car.meanColor()
ncarmc    = nonly_car.meanColor()

print "yellow car present, mean color:", carmc
print "no yellow car present, mean color", ncarmc

至于 meancolor 不同,我会假设图像已经稍微调整或 Color.YELLOW 的值已经改变......

顺便说一句,如果您正在比较两个调用了 colorDistance 方法的图像(或从另一个裁剪中减去一个裁剪),那么它们都以相同的方式进行了转换,因此您只需要执行 rotateRight().flipHorizo​​ntal () 在最终图像显示之前(如果有的话)。

于 2014-06-16T02:44:29.000 回答