imread 的结果和 opencv 结果不一致
opencv-mobile 版本 4.12 python opencv 版本 4.12 ubuntu x64 opencv 版本 4.5
imread 的结果 opencv-mobile 和后两者不一致(后两者的结果是一致的)。
这可能的原因在哪里呢?有什么编译选项可以解决这个问题么?
Hi @roachsinai! I'm Dosu and I’m helping the opencv-mobile team.
造成 opencv-mobile 4.12 的 imread 结果与标准 OpenCV(包括 Python 4.12 和 Ubuntu x64 4.5)不一致的主要原因,是 opencv-mobile 重新实现了 imread,使用了 stb 库而不是标准 OpenCV 的第三方解码库(如 libjpeg、libpng 等)。这会导致解码方式、色彩通道顺序(如 PNG 读成 RGB 而不是 BGR)、格式支持等方面与标准 OpenCV 不同,尤其在 PNG、JPEG 等格式上表现明显。相关说明见官方文档。
目前没有编译选项可以让 opencv-mobile 的 imread 完全与标准 OpenCV 保持一致。如果遇到 PNG 颜色通道顺序问题,可以在读取后手动用 cv::cvtColor(img, img, cv::COLOR_RGB2BGR) 转换。更多细节和 workaround 可参考相关 issue。
如果需要完全一致的行为,建议使用标准 OpenCV 或自行集成标准的解码库。
To reply, just mention @dosu.
How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other