我是使用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)是什么意思? 如果你有任何我可以参考的链接,最受欢迎。
答案 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阈值级别: