matlab与opencv读取同一帧视频时会得到不同的像素值

Posted 雾恋过往

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab与opencv读取同一帧视频时会得到不同的像素值相关的知识,希望对你有一定的参考价值。

        我正在尝试将 matlab 脚本转换为 python。 matlab 脚本读取 .avi 视频文件,并且对于视频中的每个帧,它得到三通道(红色,绿色和蓝色)的像素值,以便我做后续处理。

        但是奇怪的事发生了,matlab 和 python的 rgb 像素值不一样,我也知道 matlab 是 RGB 方式存储,python 的 opencv 是 BGR 存储,但是匹配后仍不一样,到目前为止,我似乎只发现 opencv 的 cv2 是按 BGR 存储,其他的都是按 RGB 方式存储。

现象

        通过比较两者读同一帧视频的结果来看,很少有一致的,基本存在三种情形:

  • 同一像素点通道值差2
  • 同一像素点通道值差1
  • 同一像素点通道值一致

        且并不是说 R通道差2,我的G、B也差2,三个通道相差的值无一致性。

       

解决办法

        现在还未解决。

       

我认为的可能原因

        可能是解码方式不同造成的

        opencv 采用 ffmpeg 解码后的值,matlab采用自己的解码方式,因为视频帧与帧存在参考关系,视频压缩、编码的原理也基本是基于此参考关系。所以可能是解码方式的不同造成了这一个问题。

        暂时不知道如何解决这个问题

以上是关于matlab与opencv读取同一帧视频时会得到不同的像素值的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenCV 将视频帧读取到指定的指针(C++)

OpenCV入门(C++/Python)- 使用OpenCV读取和编写视频

读取视频帧matlab

使用 Opencv 加速从摄像头读取视频帧

OPENCV 不能同时读取 2 个视频帧

二.使用 OpenCV 读写视频