对视频文件中每个蒙版帧进行'White'像素计数

问题描述 投票:1回答:1

我正在尝试开发一种方法,以输出落在Raspberry Pi摄像机上给定视频的每一帧的HSV掩码限制之间的像素数。

这样做的目的是确定红色调光器的'红色'强度,并因此将其强度分成不同的级别,从而确定在每个帧中将光切换到哪个强度。我将如何计算所述像素数?

到目前为止,我的进步是我有使用OpenCV命令掩盖帧的方法和限制。我只需要一种计算每帧剩余像素的方法。

这是我当前的代码,与我发现的这份出色的教程略有不同:Automatic Vision Object Tracking

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

python opencv raspberry-pi3
1个回答
0
投票

您已经完成了大部分工作,现在您可以设定一定范围的上下强度(不重叠),并计算掩模中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

© www.soinside.com 2019 - 2024. All rights reserved.