【发布时间】: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