Получение «белого» числа пикселей каждого замаскированного кадра в видеофайле - PullRequest
1 голос
/ 30 марта 2020

Я пытаюсь разработать способ вывода количества пикселей, попадающих между пределами маски HSV каждого кадра данного видео на камере Raspberry Pi.

Цель этого - определить «Красная» интенсивность красного диммера и, следовательно, разбивает его интенсивность на разные уровни и, следовательно, определяет, на какую интенсивность свет переключается в каждом кадре. Как бы я go подсчитал указанное количество пикселей?

На данный момент мой прогресс заключается в том, что у меня есть метод и ограничения для маскирования кадра с помощью команд OpenCV. Мне просто нужен способ подсчета оставшихся пикселей каждого кадра.

Вот мой текущий код, который я немного адаптировал из этого замечательного учебника, который я нашел: Automati c Vision Object Отслеживание

import cv2
import numpy as np

img = cv2.imread('hsvmeasure.jpg', 1)

img = cv2.resize(img, (0,0), fx=0.2, fy=0.2)

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

lower_range = np.array([160,100,100], dtype=np.uint8)
upper_range = np.array([180,255,255], dtype=np.uint8)

mask = cv2.inRange(hsv, lower_range, upper_range)

cv2.imshow('mask', mask)
cv2.imshow('img', img)

while(1):
    k = cv2.waitKey(0)
    if (k == 27):
        break

cv2.destroyAllWindows()

Original JPEG file of red light

Masked image

1 Ответ

0 голосов
/ 07 мая 2020

Вы уже проделали большую часть работы, теперь вы можете просто сделать диапазон низкой и верхней интенсивности (не перекрывающихся) и посчитать, сколько пикселей составляет 255. В маске.

import cv2
import numpy as np

img = cv2.imread('test.jpg', 1)

img = cv2.resize(img, (0,0), fx=0.2, fy=0.2)

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

lower_intensity_levels = [ [150,100,100], [161, 100,100], [171, 100, 100] ] # non overlapping
upper_intensity_levels = [ [160,255,255] , [170, 255, 255], [180, 255, 255] ] # make these list based on your intensity requirements 
mask_on_counts = []
for i in range(len(lower_intensity_levels)):
    lower_range = np.array(lower_intensity_levels[i], dtype=np.uint8)
    upper_range = np.array(upper_intensity_levels[i], dtype=np.uint8)

    mask = cv2.inRange(hsv, lower_range, upper_range)

    mask_on_counts.append(np.sum(mask==255))

    import matplotlib.pyplot as plt
    plt.imshow(mask)
    plt.show()

for i in range(len(mask_on_counts)):
    print(f'level {i+1} number of pixels: {mask_on_counts[i]}')

enter image description here

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