当前位置: 首页 > 面试题库 >

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

东方涛
2023-03-14
问题内容

我的目标是一点一点地启动opencv,但首先我需要确定OpenCV的哪个API更有用。我预测与本地C
++实现相比,Python实现会更短,但运行时间会更密集,更慢。有没有人可以评论这两种观点之间的性能和编码差异?


问题答案:

如先前的回答所述,Python比C ++或C慢。Python的构建是因为其简单性,可移植性以及创造力,用户只需担心他们的算法,而不必担心编程问题。

但是在OpenCV中,这里有所不同。Python-OpenCV只是原始C / C 代码的包装。它通常用于结合两种语言的最佳功能,即 **C / C

的性能和Python的简单性** 。

因此,当您从Python调用OpenCV中的函数时,实际运行的是底层C / C
++源代码。因此,性能不会有太大区别。(我记得我在某处读到性能损失小于1%,不记得在哪里。OpenCV中一些基本功能的粗略估计显示 最坏情况的
损失为<4%.ie penalty = [maximum time taken in Python - minimum time taken in C++]/minimum time taken in C++) 。

当您的代码具有大量本地py​​thon代码时,就会出现问题。例如,如果您要编写自己的函数,而这些函数在OpenCV中不可用,那么情况会变得更糟。这些代码在Python中本地运行,从而大大降低了性能。

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

要记住的是,始终尝试避免Python中的循环和迭代。而是使用Numpy(和OpenCV)中可用的数组操作工具。使用简单地添加两个numpy数组C = A+B要比使用双循环快很多倍。



 类似资料:
  • 问题内容: 我知道在XML和Java文件中可以执行和不能执行的操作之间存在差异,但是到目前为止,我了解到Java文件可以完成XML文件可以完成的所有工作,至少这是我所读的书中写的(请参阅下面的引号)。 我的问题是,用Java或xml编写代码是否存在性能差异,如果是:两者中的哪一个优于另一个? 这不是有关执行此操作的正确方法的问题,而是有关纯性能的问题。 我知道xml代码已编译为java代码,也许这

  • 问题内容: 我有一些在Windows上编译的源代码。我将其转换为可在Red Hat Linux上运行。 源代码包括头文件,并且程序员已使用该函数等待毫秒的时间。这在Linux上不起作用。 但是,我可以使用该函数,但是它使用整数(以秒为单位)。我不想将毫秒转换为秒。我可以在Linux上的gcc编译中使用其他睡眠功能吗? 问题答案: 是- 定义了较早的POSIX标准,因此在Linux上可用: 描述 u

  • 问题内容: 我注意到使用pandas的迭代器时性能非常差。 这是别人所经历的吗?它特定于迭代吗?对于一定大小的数据(我正在处理2-3百万行),应该避免使用此功能吗? 在GitHub上进行的讨论使我相信,这是在数据帧中混合时引起的,但是下面的简单示例显示,即使使用一个也存在该问题。这在我的机器上需要36秒: 为什么矢量化运算之类的应用这么快?我想象那里也必须进行逐行迭代。 我无法弄清楚在我的情况下如

  • 问题内容: 我正在尝试为一些使用OpenCV的C 代码编写python包装器,但是我很难将结果(即OpenCV C Mat对象)返回给python解释器。 我查看了OpenCV的源代码,发现文件cv2.cpp具有转换功能,可以在PyObject *和OpenCV的Mat之间进行来回转换。我使用了这些转换函数,但是在尝试使用它们时遇到了分段错误。 对于使用OpenCV的python和C 代码的接口,

  • 我在我们的代码库和在线中也经常看到这种风格,如果有一个带有for循环和if语句的函数,那么所有只有它们使用的变量,除此之外没有任何其他变量被声明。例如: 或者这是过早的优化?我对C、C#和Python很好奇,它们是我使用的语言,也是我反复看到它们的地方。

  • 问题内容: 在我的一个类中,我有许多方法都从相同的字典中提取值。但是,如果其中一个方法尝试访问不存在的值,则它必须调用另一个方法以使该值与该键关联。 我目前已按以下方式实现此功能,其中findCrackDepth(tonnage)为self.lowCrackDepth [tonnage]分配一个值。 但是,我也有可能这样做 我假设两者之间存在性能差异,这与值在字典中的频率有关。这个差异有多大?我正

  • 问题内容: 我一直想知道Java SE 6中吹捧的性能改进-是在编译器中还是在运行时中?换句话说,由JDK 6编译的Java 5应用程序是否可以在JSE 5下运行(表示改进的编译器优化)?由JDK 5编译的Java 5应用程序是否可以在JSE 6下运行(表示改进了运行时优化)? 我注意到,对于完全相同的代码库,在JDK 6下进行编译所需的时间几乎是在JDK 5下进行的两倍。我希望至少有一些额外的时

  • 问题内容: 我发现了这篇文章:Python Regex vs PHP Regex, 但是如果Python的REGEX语法与PHP的REGEX语法匹配,我实际上没有得到。 我开始将一些旧的PHP代码转换为python(由于g的appengine等),现在我想通过简单的复制和粘贴来了解正则表达式是否可以100%转换。 问候, 问题答案: Python使用类似于Perl语法的语法,而PHP使用Perl兼