0

我正在使用 PIL 进行图像处理,并且尝试将彩色图像转换为灰度图像,因此我编写了一个 Python 函数来执行此操作,同时我知道 PIL 已经convert为此提供了一个函数。

但是我用 Python 编写的版本大约需要 2 秒才能完成灰度,而 PIL 的转换几乎是即时的。所以我阅读了 PIL 代码,发现我编写的算法几乎相同,但 PILconvert是用 C 或 C++ 编写的。

那么这是导致性能不同的问题吗?

4

2 回答 2

3

是的,用 Python 和 C 编写相同的算法,C 实现会更快。对于通常称为 CPython 的 Python 解释器来说,这绝对是正确的。另一个实现 PyPy 使用 JIT,因此可以实现令人印象深刻的速度,有时与 C 实现一样快。但是在CPython下运行,Python会比较慢。

于 2013-01-12T03:07:19.933 回答
2

如果要进行图像处理,可以使用

OpenCV(cv2)、SimpleCV、NumPy、SciPy、Cython、Numba ...

OpenCV、SimpleCV SciPy 已经有很多图像处理程序。

NumPy 可以以 c 速度对数组进行操作。

如果您想要 Python 中的循环,您可以使用 Cython 将带有静态声明的 Python 代码编译到外部模块中。

或者你可以使用 Numba 进行 JIT 转换,它可以将你的 python 代码转换为机器二进制代码,并且会给你接近 c 的速度。

于 2013-01-12T05:11:05.417 回答