Как использовать NP, где используется другая форма NP - PullRequest
0 голосов
/ 17 февраля 2020

Я хочу использовать код более эффективно.

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

Как многие знают, это связано с сегментацией изображения.

Я получил значение класса Image [Width] * [Height] через модель глубокого обучения.

И я хотел бы нарисовать сегментированную область в ее первоначальном цвете, а другую в сером

Ниже мой результат. человеческая часть - это сегментированная область

enter image description here

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])

Как мне написать код более четко?

...