Как заставить OpenCv показывать изображение в сочетании двух цветовых каналов? - PullRequest
0 голосов
/ 09 января 2019

Использовать OpenCV не так сложно, чтобы получить вывод одного цветового канала из изображения, и это легко сделать.

Но возможно ли, что из трех основных цветов BGR изображения я хочу видеть изображение в комбинации зеленого и красного без синего, используя функцию напрямую?

Таким образом, я могу выполнить вышеуказанную операцию, установив для всех значений синего цвета значение 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 - единственный способ сделать это?

Итак, это изображение, над которым я работаю (на самом деле может использовать любой вид изображения): enter image description here

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

Это вообще возможно?

1 Ответ

0 голосов
/ 14 января 2019

Полагаю, одну вещь, которую вы могли бы сделать, это отдельно держать каналы и объединить то, что вы хотите для просмотра:

#!/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()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...