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/

相关文章:

python - Golang 相当于 Python 的 NotImplementedException

python - 如何按字典长度对字典列表进行排序

python - 使用十进制 ASCII 值转义字符串中的序列?

java - 在 Java 中渲染 "Slice"的球体 - 效率

java - Java 应用程序性能是否取决于将变量传递给方法?

c++ - ffmpeg:sws_scale 在 RGB 到 YUV420 转换期间返回平面 V 中的错误值

c++ - 对 C++ 基类布局感到困惑

c++ - 如何解释内存分配延迟的急剧跳跃?

c++ - 应用程序中的运行时错误 - 分段失败

php - MySQL 性能 - 单个值的 "IN"子句与等于 (=)