Определите цвет для извлечения с помощью opencv

У меня есть изображение, и мне нужно стереть все зеленые элементы.

Прямо сейчас я делаю это,

hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
lower_green, upper_green = np.array([36, 25, 25]), np.array([70, 255, 255])
mask1 = cv.inRange(hsv, lower_green, upper_green)
result = cv.bitwise_and(img, img, mask=mask)

cv.imwrite("logo.png", result)

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

По этой причине я попытался использовать две маски, используя зеленые значения в качестве ограничителей. Но теперь я получаю черное изображение и, кроме того, я думаю, что усложняю метод.

hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
lower_green, upper_green = np.array([36, 25, 25]), np.array([70, 255, 255])
mask1 = cv.inRange(hsv, np.array([0, 25, 25]), lower_green)
mask2 = cv.inRange(hsv, upper_green, np.array([179, 25, 25]))
mask = cv.bitwise_or(mask1, mask2)
result = cv.bitwise_and(img, img, mask=mask2)

cv.imwrite("logo.png", result)

Я правильно делаю? Как я могу это сделать? Я всегда нахожу объяснения, как найти цвет, чтобы устранить все остальное, но это не моя цель.

Спасибо!

пожалуйста, проиллюстрируйте свою проблему картинками.

Christoph Rackwitz 12.12.2020 22:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
95
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я полагаю, вы хотите инвертировать свою маску.

result = cv.bitwise_and(img, img, mask=~mask)

Обратите внимание на ~, который инвертирует маску.

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

Другие вопросы по теме