- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 PIL 在 Python 中进行一些图像处理,我需要从一系列图像中提取亮度层,并使用 numpy 对其进行一些处理,然后将编辑后的亮度层放回图像中并保存.问题是,我似乎无法以 YCbCr 格式获得任何有意义的图像表示,或者至少我不明白 PIL 在 YCbCr 中给我什么。 PIL 文档声称 YCbCr 格式提供了三个 channel ,但是当我使用 np.asarray 从图像中获取数据时,我得到了 4 个 channel 。好的,所以我认为其中一个必须是 alpha。
这是我用来测试这个过程的一些代码:
import Image as im
import numpy as np
pengIm = im.open("Data\\Test\\Penguins.bmp")
yIm = pengIm.convert("YCbCr")
testIm = np.asarray(yIm)
grey = testIm[:,:,0]
grey = grey.astype('uint8')
greyIm = im.fromarray(grey, "L")
greyIm.save("Data\\Test\\grey.bmp")
我期待我的图像的灰度版本,但我得到的是一团乱麻:
任何人都可以向我解释我哪里出错了吗? matlab 中的相同代码完全符合我的预期。
最佳答案
因为 YCbCr 是 simple , 数学上 determinate conversion从 RGB 颜色空间来看,通过 YCbCr 的中间阶段只是从图像中提取计算(非绝对)亮度值的一种间接方式。您可以更直接地完成相同的任务:
yIm = pengIm.convert('L')
我怀疑您通过 numpy asarray 或 fromarray 或在您的 numpy 代码中进行的转换存在问题,因为序列:
>>> import Image
>>> import ImageOps
>>> import ImageChops
>>> c = Image.open('squished_levels.png')
>>> c
<PngImagePlugin.PngImageFile image mode=RGB size=320x240 at 0xB7686DAC>
>>> c.getbands()
('R', 'G', 'B')
>>> d = c.convert('L')
>>> d.getextrema() # squished_levels.png has squished levels for testing
(77, 182)
>>> d.getbands()
('L',)
>>> e = ImageOps.equalize(d)
>>> e.getextrema()
(0, 255)
>>> f = e.convert('RGB')
>>> g = ImageChops.lighter(c, f)
>>> g.show() # not squished in luminance
一切都按预期工作。顺便说一下,
>>> h = c.convert('YCbCr')
>>> h
<Image.Image image mode=YCbCr size=320x240 at 0xB761378C>
>>> h.getpixel((0,0))
(119, 127, 128)
>>> h.getbands()
('Y', 'Cb', 'Cr')
给我三个 channel ,而不是四个。
关于Python 成像 : YCbCr problems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2797102/
我正在使用 PIL 在 Python 中进行一些图像处理,我需要从一系列图像中提取亮度层,并使用 numpy 对其进行一些处理,然后将编辑后的亮度层放回图像中并保存.问题是,我似乎无法以 YCbCr
问题是从内存中加载 jpeg 编码的图像。 我从套接字收到一个字符串: jpgdata = self.rfile.read(sz) 我知道这是 jpeg 编码的图像。 我需要解码它。最愚蠢的解决方案是
我目前正在检查一个项目的 django。我也在看 django-cms。 Django-cms 需要 python-imaging。我找不到在当前版本的 OSX 上安装它的简单方法,事实上,在我什至开
我在 Visual Studio Code 中开发 F#,当我尝试使用 FAKE 编译我的代码时,出现上述错误: warning MSB3245: Could not resolve this ref
我正在使用 Apache Commons Imaging library (Java 8,你可以找到我的代码 here )并且我遇到了一些标签问题: 如果我打开例如的图像信息this Win 10 的
尝试使用 PIL创建一个透明的 gif。到目前为止,我有这个: from PIL import Image img = Image.new('RGBA', (100, 100), (2
我在使用 leadtools imaging api 时在 asp.net 中遇到一个奇怪的错误。这是堆栈跟踪。 System.AccessViolationException: Attempted
我试图将最初的列表“ThetaVect1”转换为形状为(16,)的np.ndarray,将其更改为(4,4)数组,然后使用np.ndarray。 newaxis 来获得第三个维度,我试图将其设置为 3
对于 3d 成像软件,我正在编码: 我需要定义一个椭球 E,它可以在空间中具有任何半径、中心和旋转 用户界面允许用户控制 3 个椭圆,它们是椭圆的“切片”(图像中的红色、绿色、蓝色),并且(根据定义)
我是一名优秀的程序员,十分优秀!