OpenCV的Python或C ++编码的性能是否不同?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (294)

我的目标是一点一点地启动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++) 。

当您的代码具有大量本机python代码时会出现问题。例如,如果您正在创建自己的OpenCV中没有的功能,情况会变得更糟。这些代码在Python中本地运行,这大大降低了性能。

但新的OpenCV-Python界面完全支持Numpy。Numpy是Python中的科学计算软件包。它也是本机C代码的包装器。它是一个高度优化的库,支持各种矩阵操作,非常适合图像处理。因此,如果您可以正确组合OpenCV函数和Numpy函数,您将获得非常高速的代码。

要记住的是,总是尽量避免Python中的循环和迭代。相反,使用Numpy(和OpenCV)中提供的数组操作工具。简单地使用两个numpy数组C = A+B比使用双循环快很多倍。

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

  1. Python中的快速数组操作
  2. OpenCV-Python接口,cv和cv2的性能比较
用户回答回答于

你是对的,Python几乎总是比C ++慢很多,因为它需要一个解释器,而C ++却没有。但是,这确实要求C ++是强类型的,这会留下更小的错误余量。有些人更喜欢严格编码,而其他人喜欢Python的内在宽容。

如果你想要对Python编码风格和C ++编码风格进行全面讨论,那么这不是最好的地方,试着找一篇文章。

编辑:因为Python是一种解释型语言,而C ++被编译成机器代码,一般来说,使用C ++可以获得性能优势。但是,关于使用OpenCV,核心OpenCV库已经编译成机器代码,因此围绕OpenCV库的Python包装器正在执行编译代码。换句话说,当涉及从Python执行计算上昂贵的OpenCV算法时,您不会看到很多性能损失,因为它们已经针对您正在使用的特定体系结构进行了编译。

扫码关注云+社区

领取腾讯云代金券