kla*_*cht -1 python django image imagemagick opencv3.0
我想对将上传到 django 的图像进行灰度处理。所以我找到了两种方法,要么是opencv,要么是imagemagick。在 imagemagick 中,imagemagickWand 可能会更好,因为它减少了。
从教程中我认为 openCV 更容易实现。
有任何想法吗?
如果首先转换为线性光,您可以获得更好的结果。
sRGB 图像将应用大约 2.4 的伽马,也就是说,亮区的范围比暗区更大。如果您0.2 r + 0.7 g + 0.1 b直接在 sRGB 图像上进行操作,它可能会扭曲亮度关系,例如:
从左边开始,那些是原始图像,一个由 sRGB 简单重组制成的灰度,一个由非常花哨的局部自适应算法制成的灰度,以及一个由线性光制成的灰度。线性光版本比非线性版本更好地保持红蓝差异,尽管它看起来不如自适应版本那么好。您可以在此处阅读有关自适应算法的信息。
可以通过简单的反伽马转换为线性光,如果您确定您有 sRGB,或者更好的是,通过使用 ICC 配置文件转换为 XYZ。pyvips内置了线性光灰度转换,请尝试:
import pyvips
image = pyvips.Image.new_from_file("/home/john/pics/k2.jpg", access="sequential")
image = image.colourspace("b-w")
image.write_to_file("x.jpg")
Run Code Online (Sandbox Code Playgroud)
与 PIL 或 imagemagick 相比,vips 的优势在于质量更好、速度更快、内存使用更少。对于 10,000 x 10,000 像素的 RGB JPEG,我看到:
$ time ./magickwand.py
real 0m2.613s
user 0m2.084s
sys 0m0.500s
peak RES 840MB
$ time ./vips.py
real 0m1.722s
user 0m5.716s
sys 0m0.116s
peak RES 54MB
Run Code Online (Sandbox Code Playgroud)
那是在两核笔记本电脑上。