LINUX.ORG.RU

Фильтры из масок в open cv

 ,


0

1

Добрый день, после определения цветовой области «circles» с помощью маски определения цвета и open cv, я хочу проверить облась «circles2» чтобы выяснить если контур circles2 находиться на темном-черном цвете. Заранее спасибо

 circles2 = cv2.circle(image_copy, center, radius2, (255, 0, 0), 2)

        circles = cv2.circle(image_copy, center, radius, (0, 255, 0), 2)

        #if circles2 (тут проверить на каком цвете находиться контур)


пример распознания, https://drive.google.com/file/d/1ZM97p8_zHw_09nJAnt2IZRZDY8N4dXd_/view?usp=sharing circles - обозначены зеленым кругом circles2 - обозначены синим кругом

Лол. Ты вообще не думаешь перед тем как сюда постить? Ну тип даж в языке не надо разбираться что бы понять, что вот тут:

black = cv2.inRange(hsv, (1, 0, 0), (180, 255, 85))


mask_black = czarny>0


czarny = np.zeros_like(image, np.uint8)

czarny[mask_black] = image[mask_black]

Ты ищешь по этому цвету (1, 0, 0), (180, 255, 85). Прост переконфигурируй маску на оранжевый.

Aswed ★★★★★ ()
Ответ на: комментарий от Aswed

Вы не поняли моего вопроса, точнее я не умею доходчиво обьяснять, прошу за это меня извинить, кстати проблема уже решена, обычным дублированием петли и переменных с значением другого цвета.

katemisik ()
Ответ на: комментарий от katemisik

Я правильно понимаю, что твоя задача найти все оранжевые светофоры на картинке? Если так, что ты сначала по черным контурам находишь светофор, вырезаешь его и на обрезанной картинке светофора ищешь оранжевый круг.

Fake true из-за чего? Красные вместо желтого выбираются? Если так - подкрути цвета между которыми ищешь.

Кстати, почему используешь пространство hsv? rgb же явно удобнее для человека.

Aswed ★★★★★ ()
Ответ на: комментарий от Aswed

Кстати, почему используешь пространство hsv?

Вангую одно из двух: так сказал препод или потому что в hsv удобнее работать с «цветом» как таковым (выделять оттенки и вот это вот все)

ymn ★★★★★ ()
Ответ на: комментарий от Aswed

Если можете, пожалуйста, подскажите, почему не видит opencv мой светофор!

Спасибо за Ваш ответ, проблема в том что я не могу найти сам светофор. Вот ссылка на фото после распознания https://drive.google.com/file/d/1AEwzGaUQZqpSdFgjesqwcBDSFMm9K0Tq/view?usp=sharing

я не знаю почему, даже беру с картинки цвет в точь-в-точь и это не помогло фильтр цвета почему-то видит темноту, но не светофор. После изменений областей тоже светофор не нашло if (cv2.contourArea(c)) > 800: Если можете, пожалуйста, подскажите, почему не видит opencv мой светофор! Заранее спасибо!

katemisik ()

Конкретно в этом случае проблема очевидна: выделенные зеленым участки самые черные на картинке, а «черная часть светофора» светлее из-за засветки лампочки. Вот я беру пипетку и тыкаю в зеленую область справа вверху: (RGB: 42,41,38). Тыкаю в светофор: (RGB: 85, 55, 32).

У тебя тут в принципе несколько путей решений:

  1. Выкручивать контрасность у фото, что бы на ночных снимках контур светофора был чернее

  2. Сделать разные модели распознавания для ночных и дневных, на ночном искать менее черный объект

  3. Забить на голый opencv взять какую-нибудь ML штуку для питона, например эту(https://github.com/ultralytics/yolov5) и обучить ее на размеченых фото, коих у тебя наверняка хватает

Aswed ★★★★★ ()

Кстати

я хочу проверить облась «circles2» чтобы выяснить если контур circles2 находиться на темном-черном цвете.

Ты изначально движешься не в ту сторону. Твоя идея в том, что бы найти красный кружок и убедиться, что вокруг него все черное и вот это посчитать за светофор. Вот только у тебя снимок переезда, где могут быть машины, а у машин красные огоньки сзади, которые ночью, на темных машинах так же будут выглядеть как красные кружки на темном фоне. Как ты отличишь машину от светофора? Тут даже выбор размера не поможет, т.к. при правильном ракурсе стоп-сигнал впереди стоящей машины будет больше чем светофор вдалеке.

Aswed ★★★★★ ()