繁体   English   中英

OpenCV:如何计算灰度平均值并将输出保存到txt文件

[英]OpenCV: How to compute the mean of a Grayscale and save the output to a txt-file

我在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 fps的帧率拍摄。 因此,我应该能够了解每个帧的视频时间。 我可以简单地创建一个count变量,并假设每帧计数都增加1/30秒。 但是,又有一个更复杂的解决方案吗?

关于第一个问题,您是对的。 元组4代表4个通道的平均值,分别为RGB和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库添加时间戳。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM