обнаружение основного объекта изображения и удаление фона

#python #opencv #image-processing #computer-vision #haar-classifier

#python #opencv #обработка изображений #компьютерное зрение #haar-классификатор

Вопрос:

Мне нужно определить основную (переднюю) машину на изображении, чтобы поместить ее в другое изображение без или с простым фоном. Ниже приведен пример изображения:

Исходное изображение

Я разрабатываю на Python 3 с OpenCV 4.

Я попробовал HaarCascade, но он работает плохо, даже со многими различными гиперпараметрами в detectMultiScale:

 car_cascade = cv2.CascadeClassifier('./haarcascade/haarcascade_car.xml') 

car_detected = car_cascade.detectMultiScale(img_gray1, 2.2, 4)

cars_with_detections = np.copy(img1)

for (x, y, w, h) in car_detected:
    cv2.rectangle(cars_with_detections, (x, y), (x w, y h), (255, 0, 0), 5)

plt.figure(figsize=(25,15))
plt.imshow(cars_with_detections)
  

Haarcascade

Комментарии:

1. Вы уверены «haarcascade_car.xml » работает нормально?

Ответ №1:

Фон для этого изображения довольно сложно удалить (при сохранении формы автомобиля) из-за других красных автомобилей и разных объектов.
Я пробовал различные методы: размытие (фильтр Гаусса, фильтр бокса и т. Д.).

Если вам нужно сделать это только для одного изображения, а на другое изображение поместить только автомобиль, вам может повезти больше с помощью Photoshop и инструмента Magic Wand.

Тем не менее, я смог подобраться довольно близко с помощью простой обработки OpenCV с помощью экспериментов в программном обеспечении GRIP (графически представленная обработка изображений).

Вот мой конвейер:
Конвейер обработки изображений

Исходное изображение: введите описание изображения здесь

  1. CV Subtract (вычитание «красного» цвета автомобиля, чтобы получить темную каплю для автомобиля)
    Красный(Красный) Вычесть

  2. Порог HSV (для создания маски с кузовом автомобиля) Пороговое значение

  3. Размытие (размытие порога HSV для получения более плотной маски) Размытие

  4. Найти контуры (чтобы найти контур кузова автомобиля с помощью размытой маски) Контуры

  5. Маска (примените маску к исходному изображению, чтобы просто получить пиксели автомобиля) Маска

Я знаю, что мой код, возможно, не дал желаемого результата, но я надеюсь, что вы цените мои усилия и время, а также мои альтернативные решения.

Вот ссылка для загрузки GRIP

Вот ссылка для загрузки кода конвейера обработки изображений в виде файла Python и файла GRIP