Python 为什么SciKit的分水岭函数太慢?

Python 为什么SciKit的分水岭函数太慢?,python,time,native,scikit-image,watershed,Python,Time,Native,Scikit Image,Watershed,我比较了OpenCV、Skimage(SciPy)和BoofCV中仅针对分水岭函数的执行时间。尽管OpenCV似乎比其他两个要快得多(10个样本的平均时间:0.0031秒),但执行的略读时间差别很大(从0.03秒到0.554秒)。我想知道为什么会这样?它不应该是一个本地python函数吗 如果没有更多细节,很难知道特定应用程序运行缓慢的原因。不过,总的来说,scikit映像代码并不像OpenCV那样优化,而是涵盖了更多的用例。例如,它可以使用浮点值作为输入,而不仅仅是uint8,还可以使用3D甚

我比较了OpenCV、Skimage(SciPy)和BoofCV中仅针对分水岭函数的执行时间。尽管OpenCV似乎比其他两个要快得多(10个样本的平均时间:0.0031秒),但执行的略读时间差别很大(从0.03秒到0.554秒)。我想知道为什么会这样?它不应该是一个本地python函数吗

如果没有更多细节,很难知道特定应用程序运行缓慢的原因。不过,总的来说,scikit映像代码并不像OpenCV那样优化,而是涵盖了更多的用例。例如,它可以使用浮点值作为输入,而不仅仅是uint8,还可以使用3D甚至更高维度的图像


关于性能:OpenCV是用高度优化的C/C++编码的,而scikit图像是用Cython编码的,Cython是一种将Python代码编译成C的混合语言,实现了C性能。但是,Cython中没有几个优化,正如我前面提到的,实际实现的内容存在差异,导致性能差异。

非常感谢您的回答。我在OpenCV和Scikit图像中使用完全相同的代码,只需使用OpenCV调用一次分水岭(首先我必须将其转换为彩色RGB图像),然后使用Scikit图像调用一次分水岭。所以我得到了上面的区别。我知道scikit也可以处理3D图像,但我想将其与OpenCV进行比较,OpenCV不能,因此我只能处理2D图像。