我有一个应用程序,我在Windows中编写并使用OpenCV进行图像评估测试。它使用OpenCV 3.1.0并使用MinGW-W64 5.3.0进行编译。
现在,我已经克隆了这个应用程序,并在Linux环境中构建并测试了它。我首先在Raspberry Pi(Raspian Jessie)上做到了,然后我在笔记本电脑上做了它(Ubuntu 16.04,g ++ 5.4.0)。我评估了相同的图像并得到了不同的结果。
我发布的代码太多,并希望每个人都能排序,所以我的基本问题是,我应该特别寻找一些东西吗?现在我正在Ubuntu的笔记本电脑上调试它,但是如果有人在过去有类似的经验并且知道要立即寻找的东西,它可以节省我一些时间。
我应该提一下我正在使用的功能:
cv::cvtColor
cv::Blur
cv::Canny
cv::FindContours
cv::fitLine
cv::fitEllipse
答案 0 :(得分:3)
图像加载可能是其中一种情况。请尝试匹配Windows&中的像素值。在imread
之后的linux或mac。基于不同的版本和安装在机器上的编解码器可以变化不大。对于压缩图像格式(如jpg,png,tiff等),此像素值不匹配可能会发生。对于未压缩格式(如pgm,bmp或原始格式),不应发生这种情况。请阅读opencv文档中的以下几行:
1 /该功能通过内容而不是文件扩展名确定图像的类型。
2 /在Microsoft Windows OS和MacOSX上,默认情况下使用附带OpenCV映像(libjpeg,libpng,libtiff和libjasper)的编解码器。因此,OpenCV始终可以读取JPEG,PNG和TIFF。在MacOSX上,还可以选择使用本机MacOSX图像阅读器。但请注意,由于MacOSX中嵌入了色彩管理,目前这些原生图像加载器会为图像提供不同的像素值。
3 /在Linux,BSD风格和其他类Unix开源操作系统上,OpenCV寻找随操作系统映像提供的编解码器。安装相关软件包(不要忘记开发文件,例如,在Debian和Ubuntu中使用“libjpeg-dev”)以获得编解码器支持或在CMake中打开OPENCV_BUILD_3RDPARTY_LIBS标志。
答案 1 :(得分:1)
我发现差异根本与OpenCV无关,而且是函数“std :: fpclassify”的行为,我在这里查看一行的斜率是否为“NaN”。我将结果与“1024”进行比较,看它是否是有效的正常数,即枚举“FP_NORMAL”。但是,在linux中编译时,“FP_NORMAL”等于4而不是1024!问题解决了。
答案 2 :(得分:1)
从你给我们的一些信息中我可以告诉你OpenCV算法和函数是独立于平台的。 OpenCV docuemntations中提到的唯一内容是:
可移植性,外部依赖性
正式地,代码必须符合C ++ 98标准。目前还不建议在实现级别使用C ++ 11或TR1扩展,并且禁止在外部头文件中使用它。 应该摆脱依赖于编译器或平台的构造和系统调用,例如:
来源:here
尝试查看代码中的某些内容是否与平台有关。 在我看来(但这只是一种感觉),可能它与OpenCV Mats中的数字表示有关。尝试查看某些内容是否依赖于平台int大小或浮点大小......
我能想到的全部......