Python或OpenCV的C ++编码之间的性能不同吗?
我的目标是一点一点地开始opencv,但首先我需要决定OpenCV的哪个API更有用。 我预测Python的实现更短,但与本机C ++实现相比,运行时间将更密集和更慢。 有什么可以评论这两个观点的performance和编码差异吗?
正如在前面的答案中提到的那样,与C ++或C相比,Python速度较慢。Python的构build是为了简单易用,而且具有创造性,用户只需要关心其algorithm,而不用担心编程问题。
但是在OpenCV中,有一些不同的地方。 Python-OpenCV只是原始C / C ++代码的一个包装。 它通常用于结合语言的最佳特性,C / C ++性能和Python简单性 。
所以当你从Python调用OpenCV中的函数时,实际运行的是底层C / C ++源代码。 所以在性能上并没有太大的差别(我记得我在某处看到性能损失小于1%,不记得在哪里,在OpenCV中一些基本function的粗略估计显示最坏情况的惩罚是<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代码的包装。 这是一个高度优化的库,支持各种各样的matrix操作,非常适合image processing。 所以,如果你能正确地结合OpenCV函数和Numpy函数,你将会得到一个非常高速的代码。
要记住的是,总是试图避免Python中的循环和迭代。 相反,使用Numpy(和OpenCV)中可用的数组操作工具。 使用C = A+B
简单地添加两个numpy数组要比使用双重循环快很多倍。
例如,你可以检查这些文章:
- Python中的快速数组操作
- OpenCV-Python接口cv和cv2的性能比较
你是对的,Python几乎总是比C ++慢得多,因为它需要一个解释器,而C ++不需要。 但是,这确实需要C ++是强types的,这就使得错误的边缘更小。 有些人宁愿严格编码,而另一些人则喜欢Python的内在宽大。
如果您想要对Python编码风格与C ++编码风格进行全面讨论,那么这不是最好的地方,请尝试查找文章。
编辑:因为Python是一种解释的语言,而C ++编译到机器代码, 一般来说 ,你可以获得使用C + +的性能优势。 但是,关于使用OpenCV,核心OpenCV库已经被编译为机器代码,所以围绕OpenCV库的Python包装正在执行编译代码。 换句话说,当从Python执行昂贵的OpenCValgorithm时,由于已经针对您正在使用的特定体系结构进行了编译,所以您不会看到很多性能问题。