c++ - Linux 和 Windows 构建的应用程序之间的 OpenCV 行为差异

标签 c++ linux opencv g++ mingw-w64

我有一个在 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

最佳答案

图片加载可能就是其中一种情况。请尝试在 imread 之后匹配 windows & linux 或 mac 中的像素值。基于机器上安装的不同版本和编解码器,它可能会有很小的差异。对于像 jpg、png、tiff 等压缩图像格式,这种像素值不匹配可能会发生。对于像 pgm、bmp 或原始格式这样的未压缩格式,它不应该发生。请阅读 opencv 文档中的以下几行:

1/该函数根据内容而不是文件扩展名来确定图像的类型。

2/在 Microsoft Windows 操作系统和 MacOSX 上,默认使用 OpenCV 图像附带的编解码器(libjpeg、libpng、libtiff 和 libjasper)。因此,OpenCV 始终可以读取 JPEG、PNG 和 TIFF。在 MacOSX 上,还有一个选项可以使用 native MacOSX 图像阅读器。但请注意,由于 MacOSX 中嵌入了颜色管理,目前这些 native 图像加载器会提供具有不同像素值的图像。

3/在 Linux、BSD 风格和其他类 Unix 开源操作系统上,OpenCV 会查找随操作系统镜像提供的编解码器。安装相关包(不要忘记 Debian 和 Ubuntu 中的开发文件,例如“libjpeg-dev”)以获得编解码器支持或在 CMake 中打开 OPENCV_BUILD_3RDPARTY_LIBS 标志。

Link

关于c++ - Linux 和 Windows 构建的应用程序之间的 OpenCV 行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40065011/

相关文章:

Linux命令用重定向输出的文本替换文件中的文本

c++ - 使用 OpenCV 的 ANN 中笨重的 CvMat*

python - 在pycharm中找不到opencv函数的引用

python - 如何使用 python 脚本或任何命令在 hyper-v 上使用 WMIC 创建虚拟机?

python - 在没有 root 的情况下安装 Python 2.7

c++ - OpenCV:反转图像的负片区域

c++ - & 打印出字符串的其余部分而不是地址

c++ - Antlr 和链接失败

c++ - 使用C++编程访问C盘

c++ - 可视化代码流的工具 (C/C++)