Я хочу использовать код более эффективно.
, и теперь я конвертирую цвет изображения, ссылаясь на значение формы изображения
Как многие знают, это связано с сегментацией изображения.
Я получил значение класса Image [Width] * [Height] через модель глубокого обучения.
И я хотел бы нарисовать сегментированную область в ее первоначальном цвете, а другую в сером
Ниже мой результат. человеческая часть - это сегментированная область
def read_video_frame(video_path):
cap = cv2.VideoCapture(video_path)
while(cap.isOpened()):
ret, frame = cap.read()
frame = cv2.resize(frame, dsize=(448, 448), interpolation=cv2.INTER_AREA)
image = np.array(frame)
mask = model_run(image) # Deep learning model
gray = skimage.color.gray2rgb(skimage.color.rgb2gray(image)) * 255
if mask is None:
segmented_image = gray.astype(np.uint8)
else:
segmented_image[:, :, 0] = np.where(mask >= 1, image[:, :, 0], gray[:, :, 0])
segmented_image[:, :, 1] = np.where(mask >= 1, image[:, :, 1], gray[:, :, 1])
segmented_image[:, :, 2] = np.where(mask >= 1, image[:, :, 2], gray[:, :, 2])
cv2.imshow('video', segmented_image)
if cv2.waitKey(1) & 0xff == ord('q'):
break
cap.release()
И на рисунке вы найдете неудобную часть кода.
Например, я получил значение класса (5 * 5) через модель глубокого обучения
Форма массива NumPy выглядит следующим образом.
ex = np.array([[0,0,1,0,0],
[0,1,1,1,1],
[0,0,1,1,1],
[0,0,0,2,2],
[0,0,1,2,2]
])
Если значение массива было больше 1, использовалось бы исходное значение изображения, а если бы оно было 0, использовалось бы значение изображения серого цвета.
Итак, я хотел использовать np.where () для с этим все сразу.
segmented_image[:, :] = np.where(mask >= 1, image[:, :], gray[:, :])
Но я получил эту ошибку
ValueError: операнды не могли быть переданы вместе с фигурами (448,448) (448,448,3 ) (448,448,3)
(Размер моего целевого изображения 448x448)
Поскольку, как вы знаете, форма NumPy пикселя изображения имеет вид (ширина, высота, 3).
Итак, я был вынужден разделиться на три части r, g, b и сформировать изображение.
segmented_image[:, :, 0] = np.where(mask >= 1, image[:, :, 0], gray[:, :, 0])
segmented_image[:, :, 1] = np.where(mask >= 1, image[:, :, 1], gray[:, :, 1])
segmented_image[:, :, 2] = np.where(mask >= 1, image[:, :, 2], gray[:, :, 2])
Как мне написать код более четко?