На самом деле, ваше ожидаемое выходное изображение не является цветовым пространством красного канала оригинального. Это своего рода COLORMAP, который был применен на входном изображении. Хорошей новостью является то, что OpenCV предлагает множество встроенных цветовых карт. Плохая новость заключается в том, что ваш ожидаемый результат не может генерироваться встроенными цветовыми картами OpenCV. Но не сдавайтесь, вы можете сопоставить цвета, используя пользовательскую таблицу поиска, используя функцию cv2.LUT()
.
Для лучшей демонстрации здесь некоторые примеры с вашим изображением:
img = cv2.imread('origin.png')
im_color = cv2.applyColorMap(img, cv2.COLORMAP_HSV)
cv2.imshow('mapped_image', im_color)
# cv2.imwrite('result.png', im_color)
cv2.waitKey(0)
Здесь все OpenCV в Colormap-х:
print [sub for sub in dir(cv2) if sub.startswith('COLORMAP_')]
['COLORMAP_AUTUMN', 'COLORMAP_BONE', 'COLORMAP_COOL', 'COLORMAP_HOT', 'COLORMAP_HSV', 'COLORMAP_JET', 'COLORMAP_OCEAN', 'COLORMAP_PINK', 'COLORMAP_RAINBOW', 'COLORMAP_SPRING', 'COLORMAP_SUMMER', 'COLORMAP_WINTER']
Пример для отображения цветов с использованием пользовательских таблица поиска с использованием cv2.LUT()
:
table = np.array([(i * invert_value) for i in np.arange(256)]).astype("uint8")
cv2.LUT(image, table)
Возможно, вам просто нужно установить синий канал на 0 в исходном изображении BGR: 'img [:,:, 0] = 0' – Miki
Я пробовал, но результат сильно отличается от результата в imgur. –
Мне кажется, что удаляемый цветовой канал не красный, а сочетание зеленого и синего. Я предлагаю вам открыть изображение в InkScape (или любое другое программное обеспечение для обработки изображений) и воспроизвести цвета. После того как вы определили правильную комбинацию, удалите напоминание. – Crolle