Как показать самый большой прямоугольник в классификаторе OpenCV Haar - PullRequest
3 голосов
/ 01 апреля 2019

Я уже натренировал положительные и отрицательные изображения на виде сбоку автомобиля, используя обнаружение каскадных объектов Хаара, теперь, когда я использую каскадный XML-файл для прогнозирования автомобиля на изображениях, я получаю несколько прямоугольников.

Теперь
1) почему я получаю несколько прямоугольников вокруг моего объекта.
2) Как показать только самый большой прямоугольник, обнаруженный на изображении

Выходное изображение

enter image description here

Это тип вывода, который я получаю на каждом изображении

Код

car_cascade = cv2.CascadeClassifier('data/cascade.xml')
img = cv2.imread('test/46.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cars = car_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in cars:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)    

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Ответы [ 2 ]

4 голосов
/ 01 апреля 2019

Ответ Пятачка поможет вам установить порог для минимального / максимального размера, но если вы хотите найти самую большую ограничивающую рамку на изображении, вы можете сделать что-то вроде этого:

areas = [w*h for x,y,w,h in cars]
i_biggest = np.argmax(areas)
biggest = cars[i_biggest]

Здесь мы делаем следующее:

  1. Расчет всех областей ограничивающего прямоугольника с использованием списка
  2. Нахождение индекса areas с наибольшим значением, сохранение в i_biggest
  3. Использование этого индекса для извлечения самого большого (самого большого по площади) прямоугольника из cars
1 голос
/ 01 апреля 2019

Как следует из названия функции, cv2.CascadeClassifier.detectMultiScale и документация говорит:

Обнаруживает объекты разных размеров во входном изображении

Также из документации:

Python: cv2.CascadeClassifier.detectMultiScale (image [, scaleFactor [, minNeighbors [, flags [, minSize [, maxSize]]]]]])→ объекты

minSize - минимально возможный размер объекта.Объекты меньшего размера игнорируются.

Таким образом, вы либо фильтруете список получаемых прямоугольников по размеру, либо предотвращаете маленькие объекты, устанавливая параметр minSize.

...