Python SimpleCV车辆检测示例

Python SimpleCV车辆检测示例,python,opencv,computer-vision,simplecv,Python,Opencv,Computer Vision,Simplecv,所以。。。使用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")

所以。。。使用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.494075000000005)

第一张有车的停车场的照片看起来不错。。。但在灰度图像中,事情看起来显然很奇怪。我得到的图像旋转了90度,与示例中的图像完全不同。这是Dropbox上的一个链接

从那里。。。颜色距离这么远什么。。。平均颜色值不正确


关于为什么
colordance()
步骤会像以前一样返回一个时髦的旋转灰度图像,有什么想法或建议吗?

colordance似乎会返回一个旋转、翻转的图像。如果进行快速变换,可以避免这种混乱。e、 g

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
至于平均颜色不同,我会假设图像已经稍微调整,或者Color.YELLOW的值已经改变

另一方面,如果要比较调用了colorDistance方法的两个图像(或从另一个裁剪中减去一个裁剪),则它们都以相同的方式进行了变换,因此在显示最终图像(如果有的话)之前,只需对其执行rotateRight().flipHorizontal()