Numpy输出解释

时间:2017-08-08 06:59:59

标签: python numpy multidimensional-array video-processing

我是使用python进行视频处理的初学者。

我有从相机拍摄的原始视频数据,我需要检查视频中是否有明亮或暗的帧。

到目前为止,我所取得的成就是我可以在python中使用numpy来阅读原始视频。 以下是我的代码。

import numpy as np 
fd = open('my_video_file.raw', 'rb') 
rows = 4800
cols = 6400 
f = np.fromfile(fd, dtype=np.uint8,count = rows*cols) 
im = f.reshape((rows,cols)) #notice row, column format 
print im 
fd.close()

输出:

[[ 81  82  58 ...,   0   0   0]  [  0   0   0 ...,   0   0   0] 
[  0  0   0 ...,   0   0   0]  ...,   [141 128 136 ...,   1   2   2] 
[ 40  39  35 ..., 192 192 192]  [190 190 190 ...,  74  60  60]]

根据数组或numpy输出,是否可以检查原始视频数据是否具有暗(不太明亮)的帧。

另外请告诉我numpy输出(打印im)是什么意思? 如果你有任何我可以参考的链接,最受欢迎。

2 个答案:

答案 0 :(得分:1)

如果你有带有红色,绿色和蓝色通道的彩色帧,即NxMx3矩阵,那么你可以将这个矩阵从RGB表示转换为HSV(色调,饱和度,值)表示,它也将是NxMx3矩阵。然后你可以从这个矩阵中获取Value页面,即该矩阵的第三个通道,并计算该矩阵中所有元素的平均值。将任何阈值设置为0.5,如果平均值小于此值,则可以将此帧视为暗。

了解HSV here

要将RGB矢量转换为HSV矢量,您可以使用matplotlib.colors.rgb_to_hsv(arr)函数。

答案 1 :(得分:0)

只是对您的问题有点了解。 (您可能希望更多地了解数字图像表示,e.g. here)。您的视频帧以uint8格式读取,即像素的编码值介于0到255之间。

通常,较高的值表示较亮的像素。根据您的视频,您可以使用@Batyrkhan Saduanov提到的彩色或非彩色框架。所以你要做的是定义最小和最大级别,将框架声明为“暗”或“亮”。

如果是非彩色的,您可以轻松使用每个帧的平均像素值,如下所示的asign阈值级别:

if