c++ - OpenCV 的 Python 或 C++ 编码之间的性能是否不同?

标签 c++ python performance opencv

我的目标是一点一点地启动 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 数组比使用双循环快很多倍。

例如,您可以查看这些文章:

  1. Fast Array Manipulation in Python
  2. Performance comparison of OpenCV-Python interfaces, cv and cv2

关于c++ - OpenCV 的 Python 或 C++ 编码之间的性能是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13432800/

相关文章:

c++ - 寻找质数的有效方法

c - 为什么我的更复杂的 C 循环更快?

c++ - 三任务并​​行计算

c++ - 将 gprof 与套接字一起使用

未找到 Python 3.5 和 GLIBCXX_3.4.26

python - 在 python 中保存 json 响应

javascript - Web Workers 会对 ionic 应用程序有益吗?

c++ - 将多个 DLL 合并为 1

c++ - 对象如何按值或按引用传递给 C++ 函数?

python - 将系列广播到 DataFrame