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

标签 python opencv video-processing

我在 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 个(!)条目的元组,而我只期望一个。这可能与三个颜色 channel 和最后一个参数有关,我不知道它的用途。可能的修复

help = str(cv2.mean(thresh))
ROI_intensity = help[0]

然而,这对我来说并不好看。有更好的解决方案吗?

此代码的另一个问题是我希望每个结果打印在它自己的行上。而且 - 这对我来说可能是最难的部分 - 我想在强度值旁边有一个时间。该视频以 30 fps 的帧速率拍摄。所以我应该能够了解每一帧的视频时间。我可以简单地创建一个计数变量并假设每帧计数增加 1/30 秒。但是,是否有更复杂的解决方案?

最佳答案

关于第一个问题,你是对的。 4的元组分别表示4个 channel 的均值,分别为R G B和alpha,其中alpha表示透明度(注意,这取决于你如何读取图像。RGBA或BGRA)。所以写 help[0] 基本上就是写第一个 channel 的平均值。

关于第二个问题,如果你知道视频开始录制的时间,你可以得到这样的时间戳,

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 库添加时间戳。

关于python - OpenCV:如何计算灰度的平均值并将输出保存到 txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56183740/

相关文章:

python - 使用 Pandas 将具有多行的数据框转换为一行?

python - FastAPI 单参数主体导致 Pydantic 验证错误

OpenCV Mat图像在通过引用调用函数后改变大小

用于读取视频帧的 .NET 库

python将两个文本文件合并为一个文件

python - 如何在 statsmodel 的 plot_acf 函数中更改颜色?

c++ - 使用系统命令时 SendInput 不起作用

java - 在 Java 中使用 OpenCV 和 JavaCV

image - 无法在 linux 上使用 opencv 打开视频

android - 视频捕获时可以使用 opencv android 进行数字和文本检测吗?