1

这是我写的把图片分成两种颜色的脚本。我这样做是因为所有看似黑白的迷宫都不是两种颜色,而是一堆。所以我想为什么不写一个脚本来双极化自己形象。

脚本如下:

import sys
import Image

file=Image.open(sys.argv[1])
file=file.convert('RGB')
w,h=file.size
color={}
for i in range(w):
    for j in range(h):
        aux=file.getpixel((i,j))
        if aux >(200,200,200):
            file.putpixel((i,j),(255,0,0))
        else:
            file.putpixel((i,j),(0,0,0))


file.save(sys.argv[1])

以下脚本尝试读取上述脚本结果中存在的颜色时的问题

import sys
import Image

file=Image.open(sys.argv[1])
file=file.convert('RGB')
w,h=file.size
color={}
for i in range(w):
    for j in range(h):
        aux=file.getpixel((i,j))
        if aux not in color:
            color[aux]=1
        else:
            color[aux]+=1


print "file stat"
print color

图片看起来并没有偏光成两种颜色,即使它在视觉上是这样的

到底是怎么回事?

4

1 回答 1

1

我认为这里的问题是您使用的源文件是压缩的(可能是 .jpeg 文件)。当您传递sys.argv[1]file.savePIL 时,会根据文件扩展名决定是否压缩“极化”图像。因此,如果sys.argv[1]=="test.jpg"然后写入磁盘的文件将被压缩。

压缩可以在您期望的纯红色和黑色之间产生颜色。

解决此问题的一种简单方法是使用未压缩格式(例如 .png)将输出写入文件。

顺便说一句,这种“极化”通常被称为“阈值”,您生成的双色调图像是阈值图像。

另外,我认为将这个词file用作变量名不是一个好主意,因为它用于其他事物,例如http://docs.python.org/2/library/functions.html#file

下面的代码版本演示了让 PIL 编写阈值图像的压缩版本与未压缩版本之间的区别:

import sys
from PIL import Image

im=Image.open("test.jpg")
im=im.convert('RGB')
w,h=im.size
color={}
for i in range(w):
    for j in range(h):
        aux=im.getpixel((i,j))
        if aux >(200,200,200):
            im.putpixel((i,j),(255,0,0))
        else:
            im.putpixel((i,j),(0,0,0))


im.save("test_copy.jpg")
im.save("test_copy.png")


im=Image.open("test_copy.jpg")
im=im.convert('RGB')
w,h=im.size
color={}
for i in range(w):
    for j in range(h):
        aux=im.getpixel((i,j))
        if aux not in color:
            color[aux]=1
        else:
            color[aux]+=1


print "Compressed file stat"
print color

im=Image.open("test_copy.png")
im=im.convert('RGB')
w,h=im.size
color={}
for i in range(w):
    for j in range(h):
        aux=im.getpixel((i,j))
        if aux not in color:
            color[aux]=1
        else:
            color[aux]+=1


print "Uncompressed file stat"
print color
于 2013-08-10T14:27:17.350 回答