【问题标题】:Slight differences in pixel values between OpenCV and MatlabOpenCV 和 Matlab 之间的像素值略有不同
【发布时间】:2020-01-13 07:53:00
【问题描述】:

我正在尝试将一些旧的 matlab 代码移植到 python。我选择了 OpenCV,因为我熟悉这个库。尽管如此,我发现结果有点不同(这个程序似乎对纹理的微小变化非常敏感),而且我发现即使只是从磁盘读取图像,像素值也有明显不同(我认为这可能是一些抗锯齿或奇怪的行为重新调整,但在修改任何内容之前它就在那里)

我知道不同的颜色顺序(默认情况下在 matlab 中为 RGB,在 OpenCV 上为 BGR),但像素值有时仍然偏离 +-2 个单位(在每彩色图像 8 位上)。例如在下面的屏幕截图中,第二个像素是 5-14-9 (RGB),而在 matlab 中是 5-14-11。第一个像素是完全相同的值。

我想不出任何方法来检查 matlab 正在执行的精确转换/舍入,或者为什么这首先会有所不同。关于这个问题有什么想法吗?

【问题讨论】:

  • 我们说的是 jpg 图像,对吧?如果是这种情况,由于压缩/解压方式不同,没有固定的标准
  • 您在图片中的阅读情况如何?如果我们不确切知道您在做什么,我们就无法知道正在发生什么转变。见minimal reproducible example。也就是说,您下面的答案可能就是问题所在。
  • 正如大卫的回答中提到的,您实际上是在将 MATLAB 与“python 中的 OCV”进行比较,但您似乎忽略了环境之间的差异。您可能需要考虑库 mexopencv,它是 C++ 版本 OCV 的 MATLAB 接口。这将帮助您避免从 MATLAB 到 python 的转换导致的任何差异,包括行与列的主要数据结构和索引偏移量为 1。

标签: image matlab opencv computer-vision


【解决方案1】:

您确定您查看的是正确的像素吗? Matlab和Python的索引不同,Matlab的第一个索引是1,而Python的第一个索引是0。

我的猜测是您应该将 Matlab 像素 [2,1] 与索引 0 处的 Python 像素值进行比较,索引 0 是 5-14-11,就像 Matlab 中的像素值一样。

【讨论】:

  • 不是这样,索引 0 对应于 matlab 中的像素 [1,1],而不是 [2,1],在这种情况下,它在三个通道上也是相等的。我认为这不是索引问题,而是 jpeg 解压缩问题,正如@Ander Biguri 在评论中所说。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 2015-10-14
  • 2017-02-24
  • 2019-02-24
  • 2013-07-25
  • 1970-01-01
相关资源
最近更新 更多