У меня есть изображение, и мне нужно стереть все зеленые элементы.
Прямо сейчас я делаю это,
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)
Я правильно делаю? Как я могу это сделать? Я всегда нахожу объяснения, как найти цвет, чтобы устранить все остальное, но это не моя цель.
Спасибо!
Я полагаю, вы хотите инвертировать свою маску.
result = cv.bitwise_and(img, img, mask=~mask)
Обратите внимание на ~
, который инвертирует маску.
Может быть, я плохо понимаю, но если вы хотите работать с зеленым каналом, почему вы конвертировали изображение в HSV? в RGB; извлечь каналы, удалить зеленый канал (или диапазон) и снова объединить каналы.
пожалуйста, проиллюстрируйте свою проблему картинками.