什么';在python/django中实现灰度化的最佳方法是什么?

什么';在python/django中实现灰度化的最佳方法是什么?,python,django,image,imagemagick,opencv3.0,Python,Django,Image,Imagemagick,Opencv3.0,我想对上传到django的图像进行灰度缩放。所以我找到了两种方法,opencv或imagemagick。在imagemagick中,imagemagickWand可能更好,因为它减少了 从教程中,我认为openCV更容易实现 有什么想法吗 用python/django实现灰度化的最佳方法是什么 你挑吧 ImageMagick的魔杖库 从wand.image导入图像 将图像(filename='logo:')作为img: img.colorspace='灰色' 保存(filename='logo\

我想对上传到django的图像进行灰度缩放。所以我找到了两种方法,opencv或imagemagick。在imagemagick中,imagemagickWand可能更好,因为它减少了

从教程中,我认为openCV更容易实现

有什么想法吗

用python/django实现灰度化的最佳方法是什么

你挑吧

ImageMagick的魔杖库

从wand.image导入图像
将图像(filename='logo:')作为img:
img.colorspace='灰色'
保存(filename='logo\u gray.jpg')
或CV2

导入cv2
img=cv2.imread('example.jpg')
灰色=cv2.CVT颜色(img,cv2.COLOR\U BGR2GRAY)
cv2.imwrite('example_gray.jpg',gray)
这两个项目都是成熟、稳定的,并且有很大的社区基础。尝试安装这两个库并进行实验

最后,灰度只是(从)

Y=0.2126*红色+0.7152*绿色+0.0722*蓝色

两者都能很好地实现这一点,并且依赖于代理(即libjpeg)来读取和写入图像格式。

如果先转换为线性光,则可以获得更好的结果

sRGB图像的伽马值约为2.4,也就是说,明亮区域的范围大于黑暗区域。如果直接在sRGB图像上执行
0.2R+0.7G+0.1B
,可能会扭曲亮度关系,例如:

从左边看,这些是原始图像,一个由sRGB简单重组而成的灰度,一个由非常奇特的局部自适应算法制成的灰度,以及一个在线性光下制成的灰度。线性灯光版本比非线性灯光版本更好地保持红蓝差异,尽管它看起来没有自适应版本那么好。你可以

如果您确信您有sRGB,则可以通过简单的ungamma将其转换为线性光,或者更好的方法是使用ICC配置文件将其转换为XYZ。内置线性灯光灰度转换,请尝试:

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")
VIP相对于PIL或imagemagick的优势在于质量更好。对于10000 x 10000像素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

那是一台双核笔记本电脑

你真的想把图像转换成灰度,还是仅仅以这种方式显示(你可以用CSS来实现)?不,我想转换,cnavas是另一种选择,但我想用python来实现,谢谢!这与django无关。这将讨论如何将图像转换为灰度。不,可能重复。我正在寻找不同方法的优缺点,PIL是另一种方法thanks@klausruprecht我想大部分PIL的人都搬到枕头上去了。但如果我举一个例子,它将是与上面相同的4行。导入、读取、灰色、写入。您确定它是img.colorspace='gray';而不是img.type='grayscale'@保尔·伯恩·哈德瓦格纳(PaulBernhardWagner)两种方法都有效,但内部动力不同。OP没有指定灰度的上下文。好的,谢谢!如何手动调整灰度缩放?每次我使用魔杖时,它都会将透明背景的PNG变成黑色背景?非常感谢!太棒了!正是我要找的!这似乎是一个很酷的库,但我不能导入它。我使用了
sudo apt get install libvips
,但是我仍然收到一个错误,无法导入vips这是什么版本的vips?当前的Python绑定出现在v7.42及更高版本中。在此之前,有一个基于SWIG的更简单的Python接口,您使用从vipsCC import*导入的
。我更新了新libvips Python绑定的示例代码。现在您可以只安装
pip install pyvips
了,它应该在Windows、macOS和Linux上工作。感谢您指出AdaptiveGreyscale,是否有开源Python实现?