我正在使用python中的openCV库。我在一段视频中读到,并在其中标记了一个感兴趣的区域。我已经将帧从BGR转换为灰度,并且在ROI中我取值为60的阈值。我现在想做的是:计算ROI内强度值的平均值。对视频的每一帧执行此操作。然后将结果写入txt文件。
这是我的想法:
ROI_intensity = str(cv2.mean(thresh))
file = open("VelocityAnalysis.txt", "a+")
file.write(ROI_intensity)
file.close()
然而,这并没有产生预期的结果:str(cv2.mean(thresh))
返回一个带有4 (!)的元组。条目,而我期望只有一个条目。这可能与三个颜色通道和最后一个参数有关,我不知道它是用来做什么的。可能的修复
help = str(cv2.mean(thresh))
ROI_intensity = help[0]
然而,在我看来,这并不好。有没有更好的解决方案?
这段代码的另一个问题是,我希望每个结果都打印在自己的行上。这对我来说可能是最难的部分,我想要在强度值旁边有一个时间。这段视频是以30帧/秒的帧率拍摄的。所以我应该能够了解每一帧的视频时间。我可以简单地创建一个count变量,并假设每一帧的计数都会增加1/30秒。但是,再说一次,有没有更复杂的解决方案?
发布于 2019-05-17 10:34:22
关于第一个问题,你是对的。4的元组表示4个通道的平均值,分别为R、G、B和alpha,其中alpha表示透明度(请注意,这取决于您读取图像的方式。RGBA或BGRA)。所以写help[0]
基本上就是写第一个通道的平均值。
关于第二个问题,如果你知道视频开始录制的时间,你可以得到一个这样的时间戳,
timestamp_of_recorded_video = 0
fps = video.get(cv2.CAP_PROP_FPS)
frame_count = 0
while (True) :
frame, ret = video.read()
frame_count = frame_count + 1
current_time_stamp = timestamp_of_recorded_video + (frame_count/fps) #Convert to datetime format as per your convenience
file.write(str(current_time_stamp) + ',' + str(ROI_intensity) + '\n')
这是为OpenCV3准备的。使用Python的datetime库添加时间戳。
https://stackoverflow.com/questions/56183740
复制相似问题