擅长:python、mysql、java
<p>Python是一种解释性语言,对于像素循环来说还不够快。<a href="https://cython.org/" rel="nofollow noreferrer">cython</a>是一个姊妹项目,它可以将Python编译为可执行文件,对于这样的代码,它可以比普通Python更快。在</p>
<p>您还可以尝试使用Python数学库,如<a href="https://www.numpy.org/" rel="nofollow noreferrer">numpy</a>或{a3}。这些向Python添加数组操作:您可以编写类似<code>a += 12 * b</code>的行,其中<code>a</code>和{<cd3>}是整个图像,它们将同时对每个像素进行操作。你可以自己控制操作的每一个细节,再加上类似C的速度</p>
<p>例如,在<a href="https://pypi.org/project/pyvips/" rel="nofollow noreferrer">pyvips</a>中,您可以写下:</p>
<pre><code>import sys
import pyvips
x = pyvips.Image.new_from_file(sys.argv[1], access="sequential")
x = 299 / 1000 * x[0] + 587 / 1000 * x[1] + 114 / 1000 * x[2]
x.write_to_file(sys.argv[2])
</code></pre>
<p>从Vasu Deo.S的优秀答案中复制方程式,然后用类似的方法运行:</p>
^{pr2}$
<p>读取JPG图像<code>k2.jpg</code>并编写一个名为<code>x.png</code>的灰度PNG。在</p>
<p>假设源映像是sRGB,则可以在线性空间中使用pow前后近似转换:</p>
<pre><code>x = x ** 2.2
x = 299 / 1000 * x[0] + 587 / 1000 * x[1] + 114 / 1000 * x[2]
x = x ** (1 / 2.2)
</code></pre>
<p>但这并不完全正确,因为它缺少sRGB幂函数的线性部分。在</p>
<p>您还可以简单地使用<code>x = x.colourspace('b-w')</code>,pyvips的内置灰度操作。在</p>