gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:45 24 4
gpt4 key购买 nike

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

有一个人在他的图像处理算法中使用 C++ 和 OpenCV,我认为他的编程能力并不好,他只知道他的项目应该知道的东西。我被告知要与那个人合作做一个项目。另一个人将使用他已经开发的 C++ 图像处理算法(当然还有 OpenCV)。

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

最佳答案

移植代码

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** ranges, bool uniform=true, bool accumulate=false )

Python: cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) → hist

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

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

鉴于在线 OpenCV 文档的详细信息,您可以自己将 C++ 代码移植到 Python,而无需对 C++ 本身有太多了解。这可能比让您的合作者学习一门全新的语言以移植他的代码更快,尤其是考虑到您之前在目标语言方面的经验。

移植的优点

  • 您的整个项目使用一种语言进行维护。
  • Python 的优势(快速开发;无需编译;等)贯穿于整个项目。

移植的缺点

  • 您可能会发现 Python 代码通常比 C++ 代码运行得慢,因为它是高级的和解释型的。这个问题的严重程度取决于在 OpenCV 之外完成了多少处理。

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


包装现有代码

另一种选择是在 Python 绑定(bind)中使用现有的 C++ 代码,这有其自身的优点和缺点。有一个number of different options在这种情况下可供您使用。

包装的优点

  • 快速处理 - 如果 C++ 代码提供良好的接口(interface)。
  • C++ 代码的性能不受影响。

包装的缺点

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

关于python - 包装使用 OpenCV 进行图像处理的 C 代码,以便与也使用 OpenCV 的 Python 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36599211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com