我的目标是一点一点地启动 opencv,但首先我需要确定 OpenCV 的哪个 API 更有用。我预测 Python 实现会更短,但与原生 C++ 实现相比,运行时间会更密集且更慢。有知道的可以评论一下这两个角度之间的性能和编码差异吗?
最佳答案
如前面的答案所述,与 C++ 或 C 相比,Python 速度较慢。Python 的构建是为了其简单性、可移植性以及创造性,用户只需担心他们的算法,而不是编程问题。
但在 OpenCV 中,有些不同。 Python-OpenCV 只是原始 C/C++ 代码的包装器。它通常用于结合两种语言的最佳特性,C/C++ 的性能和 Python 的简单性。
因此,当您从 Python 调用 OpenCV 中的函数时,实际运行的是底层 C/C++ 源代码。所以性能上不会有太大差异。(我记得我在某处读到性能损失<1%,不记得在哪里。OpenCV 中一些基本功能的粗略估计显示最坏情况 <4%
的惩罚。即 penalty = [maximum time taken in Python - minimum time taken in C++]/minimum time taken in C++
)。
当您的代码有很多 native python 代码时,就会出现问题。例如,如果您正在制作自己的函数,而这些函数在 OpenCV 中不可用,那么情况会变得更糟。此类代码在 Python 中本地运行,这大大降低了性能。
但是新的 OpenCV-Python 接口(interface)完全支持 Numpy。 Numpy 是 Python 中用于科学计算的包。它也是原生 C 代码的包装器。它是一个高度优化的库,支持多种矩阵运算,非常适合图像处理。所以如果你能正确结合 OpenCV 函数和 Numpy 函数,你会得到一个非常高速的代码。
要记住的是,始终尽量避免 Python 中的循环和迭代。相反,使用 Numpy(和 OpenCV)中可用的数组操作工具。只需使用 C = A+B
添加两个 numpy 数组比使用双循环快很多倍。
例如,您可以查看这些文章:
关于c++ - OpenCV 的 Python 或 C++ 编码之间的性能是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13432800/