Есть ли способ проверить, все ли числа в массиве больше, чем A, и если это так, заменить его на массив одинаковой длины - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь создать что-то, что анализирует мою веб-камеру, чтобы выделить не черный пиксель (для самостоятельного отслеживания)

Я пытался с OpenCV проверить так: np.where(np.all(img>150,2),255,0), где img - это камера, но я бы хотел сделать это: np.where(np.all(img>150,2),np.array(0,255,0),img) таким образом, только изображение, которое в качестве «не черного» обозначено зеленым, а другое - таким же, как и прежде, а не белым или черным.

import numpy as np
import cv2

camera = cv2.VideoCapture(0)
while 1:
    ret_val, image = camera.read()
    if not ret_val:
        cv2.destroyAllWindows()
        camera.release()
        break
    img=image[len(image)//2:len(image)]
    A=np.where(np.all(img>150,2),255,0)
    cv2.imshow("output", np.uint8(A))

Я бы хотел, чтобы A был массивом (n, m, 3), а не массивом (n, m), где n, m - длина и ширина Заранее спасибо.

1 Ответ

0 голосов
/ 09 июня 2019

Если я правильно понимаю, вы хотели бы преобразовать «не черные» пиксели в зеленый (где «не черный» означает, что значения R, G и B все выше 150).

Простой ответ на ваш вопрос будет заменить это:

A=np.where(np.all(img>150,2),255,0)

с

A = img.copy()
A[np.where(np.all(A > 150, 2))] = np.array([0, 255, 0])

np.where(np.all(A > 150, 2)) возвращает индексы всех «не черных» пикселей, поэтому вы присваиваете значения [0, 255, 0] этим индексам. Все остальные пиксели остались прежними.

Вы также можете сделать это на месте, чтобы избежать создания другого массива, если вы можете изменить img:

img[np.where(np.all(img > 150, 2))] = np.array([0, 255, 0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...