包含使用OpenCV进行图像处理的C代码,以便与也使用OpenCV的Python一起使用

时间:2016-04-13 13:00:36

标签: python c++ opencv

这可能是一个愚蠢的问题,但我需要知道。所以,我在编程方面不是那么好,还在学习。如果这个问题有点不切实际,请原谅我。

有这个人使用C ++和OpenCV作为他的图像处理算法,我不认为他在编程方面有那么好,也就是说他只知道他应该知道的项目。我被告知要与那个人合作制作一个项目。另一个人将使用他已经开发的C ++图像处理算法(当然还有OpenCV)。

问题是我在使用OpenCV和Python。是否有可能,甚至是逻辑上包装他的代码用Python调用(这意味着我将需要学习包装C ++代码的方式)或更好地要求那个人学习一些Python并只是翻译和移动他所拥有的完成了Python?

1 个答案:

答案 0 :(得分:2)

移植代码

C和C ++代码之间的区别非常重要。 OpenCV为每种语言都有不同的API,而C API很快就会becoming deprecated,因为C ++可以作为首选语言。确保您知道正在使用哪种API。

除此之外,将OpenCV代码从一个C ++移植到Python通常很简单。 API类似,绝大多数C ++函数对应于Python包装器。

例如,calcHist

  

C ++:void calcHist(const Mat * images ,int nimages ,const int * channels ,InputArray mask ,OutputArray hist ,int dims ,const int * histSize ,const float ** 范围,bool uniform = true,bool accumulate = false)

     

Python:cv2.calcHist(图片频道掩码 histSize 范围< / strong> [, hist [,累积]])→ hist

与许多Python版本的OpenCV函数一样,您可以看到一些主要区别:

  • 由于Python内部跟踪列表大小,不需要 nimages 等参数(代表图像数量)。
  • 如果C ++函数中有输出参数(例如 hist ),Python函数通常会将其作为返回值。

鉴于在线OpenCV文档的详细信息,您可以在不太了解C ++本身的情况下自己将C ++代码移植到Python。这可能比让合作者学习一门全新语言以便移植他的代码更快,特别是考虑到您之前使用目标语言的经验。

移植的优点

  • 您的整个项目都使用一种语言进行维护。
  • 整个项目都可以获得Python的好处(快速开发;无需编译;等等)。

移植

的缺点
  • 您可能会发现Python代码通常比C ++代码运行得慢,因为它是高级的并且是解释的。此问题的严重程度取决于OpenCV之外的处理量。

  • 移植代码需要花费大量的时间和精力。

包装现有代码

另一种选择是在Python绑定中使用现有的C ++代码,它具有自己的优点和缺点。在这种情况下,您可以使用number of different options

包装的优点

  • 快速处理 - 如果C ++代码提供了良好的界面。
  • C ++代码的性能不受影响。

包装的缺点

  • 如果C ++代码没有提供良好的接口,那么将它包装起来以便在Python中使用会很痛苦。
  • 使用两种不同的语言维护项目。