【问题标题】:Why does opencv Videocapture function read video frames with wrong pixel values?为什么 opencv Videocapture 函数会读取像素值错误的视频帧?
【发布时间】:2019-09-27 02:36:44
【问题描述】:

我正在从相机捕捉视频并使用 opencv VideoWriter 函数保存它们。我将捕获的视频保存为未压缩的 avi 文件。当我完成视频录制后,我有另一个脚本应该逐帧读取视频,处理像素值。但是,当我尝试读取已保存视频的帧时,像素值有点偏离。

例如,比较正在写入的视频的第一帧和正在读取的视频(假设 100% 相同),我注意到像素值偏离了一个小数字(RGB 值偏离了一个小数字, 通常小于 5)。

我已经确保在编写视频和阅读视频时使用完全相同的视频编解码器(检查下面的代码)

def write_video():
    out = cv2.VideoWriter("encrypted.avi" ,cv2.VideoWriter_fourcc(*'XVID'),30, (640,480))
    foreach frame:
        out.write(frame)

def read_video():
    cap = cv2.VideoCapture("encrypted.avi")
    cap.set(cv2.CAP_PROP_FOURCC,cv2.VideoWriter_fourcc(*'XVID'))
    while(cap.isOpened()):
        ret, frame = cap.read()

对于我的应用程序,正在写入和读取的帧应该 100% 匹配。我附上了一张图片,突出了正在写入的视频中的第一帧和正在读取的视频之间的区别。非常感谢任何帮助!

【问题讨论】:

    标签: python opencv aes cv2


    【解决方案1】:

    这些是压缩伪影,因为您使用的是有损压缩。如果您希望您的帧匹配到最后一位,请将它们写为一系列 .PNG 文件——这些文件经过无损压缩并保留所有内容。请注意,.PNG 会比压缩视频占用更多的硬盘空间。

    【讨论】:

    • 我认为这可能与压缩有关。但是有没有办法使用opencv创建无损视频序列?
    • @user10664643 使用无损压缩。 xvid 有损。
    猜你喜欢
    • 2017-11-13
    • 2014-04-30
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多