Пример обнаружения автомобилей 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")

# 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() получилось забавное повернутое изображение в градациях серого, как это было?


person memilanuk    schedule 12.05.2014    source источник


Ответы (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

Что касается другого среднего цвета, я бы предположил, что либо изображение было немного скорректировано, либо значение Color.YELLOW изменилось ...

Кстати, если вы сравниваете два изображения, для которых был вызван метод colorDistance (или вычитали один урожай из другого), то они оба были преобразованы одинаково, поэтому вам нужно только выполнить rotateRight (). FlipHorizontal () на конечном изображении до его отображения (если вообще).

person user3258790    schedule 16.06.2014