Я новичок в Python, много сделал MATLAB, и теперь я борюсь с самыми легкими вещами. Моя проблема заключается в следующем: У меня есть изображение синтетической сцены. Определенные объекты имеют предопределенное значение rgb. Теперь я хочу извлечь эти объекты. Я объявляю значения RGB плюс некоторое смещение, и поэтому я могу создать маску, содержащую только пиксели, принадлежащие объекту, а все остальное - 0 (= черный).Маскировка объектов с определенными значениями RGB в изображениях
В течение краткого примера, предположим, что цвет нужного объекта в RGB-значений г = 255, B = 0, г = 60 со смещением = 5 для каждого цвета. Пока мой код выглядит следующим образом:
import cv2
import numpy as np
# read image_file
color_frame = cv2.imread(image_file,1)
# split the channles
b_ch,g_ch,r_ch = cv2.split(color_frame)
# mask the different channels seperately
color_frame[np.where((b_ch < b-offset) | (b_ch > b+offset))] = 0
color_frame[np.where((g_ch < g-offset) | (g_ch > g+offset))] = 0
color_frame[np.where((r_ch < r-offset) | (r_ch > r+offset))] = 0
# show the extracted image
cv.imshow('Extracted Object',color_frame)
cv.waitKey(0)
cv.destroyAllWindows()
До сих пор это все работает нормально, но я хотел бы решить «маскировку» в более быстрый/более эффективным способом. Есть ли возможность назначить что-то вроде всех 3 ограничений в одной строке? Что-то вроде color_frame[((b_ch < b-offset) | (b_ch > b+offset)) & ... & ((r_ch < r-offset) | (r_ch > r+offset)))] = 0
(это не работает) или мое решение уже самое эффективное?
вы также можете использовать np.logical_and (b_ch <б-смещение, b_ch> Ь + смещение) вместо np.where –