Использовать OpenCV для вывода одного цветового канала из изображения не так уж и сложно, и это легко сделать.
Но возможно ли, что из трех основных цветов BGR изображения я хочу видеть изображение только в комбинации зеленого и красного без синего, используя функцию напрямую?
Итак, я могу выполнить эту операцию, указанную выше, установив все значения Blue на 0, а затем увидеть изображение, код которого ниже:
import cv2
import numpy as np
gr = cv2.imread('imagetowork2.jpg')
gr[:, :, 0] = 0
cv2.namedWindow("random_image",cv2.WINDOW_NORMAL)
cv2.resizeWindow("random_image",590,332)
cv2.imshow("random_image",gr)
cv2.waitKey(0)
cv2.destroyAllWindows()
Мне пришлось прибегнуть к этому приведенному выше коду, потому что работа с этим gr[:, :, 1:3] не работала. И я не понимаю, почему функции cv2 работают со всеми трехмерными значениями, но не с двухмерными?
Это ошибка, которая возникает, если они пытаются показать изображение с помощью gr[:, :, 1:3]:
error: OpenCV(3.4.5) C:\projects\opencv-python\opencv\modules\imgcodecs\src\utils.cpp:622: error: (-15:Bad number of channels) Source image must have 1, 3 or 4 channels in function 'cvConvertImage'
Итак, мой прямой и главный вопрос: есть ли встроенная функция для выполнения этого в OpenCV или любой другой библиотеке напрямую или установка всего значения цвета как 0 - единственный способ сделать это?
Итак, это изображение, над которым я работаю (на самом деле могу использовать любое изображение):

И это результат того, что я выполнил (который я хочу получить, используя некоторую встроенную функцию и не устанавливая некоторые значения на 0):

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






Я предполагаю, что вы могли бы держать каналы по отдельности и комбинировать то, что вы хотите для просмотра:
#!/usr/local/bin/python3
import numpy as np
import cv2
im = cv2.imread('sd71Z.jpg')
b,g,r = cv2.split(im)
zeros = np.zeros_like(b)
cv2.imshow("Zero blue", cv2.merge([zeros,g,r]))
cv2.imshow("Zero green", cv2.merge([b,zeros,r]))
cv2.imshow('Zero red', cv2.merge([b,g,zeros]))
cv2.waitKey()
Это был действительно интересный и уникальный подход Марка. Спасибо за ответ.
Это потому, что обычно большинство изображений имеют 1,3 или 4 канала. Я не знаю ни одной библиотеки, которая обрабатывала бы двухканальные изображения. В любом случае, в python вы можете довольно легко установить канал на
0, например, наimg_copy = img.copy(), img_copy[:,:,0] = 0.