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采用自己的解码方式,因为视频帧与帧存在参考关系,视频压缩、编码的原理也基本是基于此参考关系。所以可能是解码方式的不同造成了这一个问题。

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