2011-05-11 80 views
1

我努力学习Python的图像,这是第一个代码,我已经写了:试图操纵使用Python

#!/usr/bin/python 
    # Filename: read_image.py 


    f=open('1.raw','r+b') 
    image=f.read() 
    f.close() 


    f=open('copy.raw','w+b') 
    f.write(image) 
    f.close() 

    for i in range(1,256): 
     image[i]=0 

在第一部分中,我简单的阅读“ RAW”的形象为二进制文件并制作它的副本。这部分工作正常,我得到代码执行后的图像副本。不过,我想处理这一形象,对于初学者,我试图抹黑图像的第一线,但我得到以下错误:

Traceback (most recent call last): 
    File "C:/Python32/read_image.py", line 15, in <module> 
    image[i]=0 
TypeError: 'bytes' object does not support item assignment 

我尝试使用“廉政”类型变量的图像复制到他们,但是错误仍然存​​在,除了'bytes'对象不支持赋值,我得到'int'对象不支持赋值。我应该如何解决这个问题?

请注意这是一个灰度图像,像素值范围从0到255,我试图在壳上打印数组图像,它显示了在这个范围内的值。

回答

3

在Python bytes是不可变的。你不能改变它们,这就是为什么当你尝试做项目分配时它会给你一个错误。您可以将您的不可变bytes对象转换为bytearray

image = bytearray(image) 
for i in range(1,256): 
    image[i]=0 
+0

好吧,试图将它转换为bytesarray,得到以下错误:NameError:name'bytesarray'未定义, – Kedar 2011-05-11 07:06:01

+0

对不起,它是'bytearray'。我确实错了。 – zeekay 2011-05-11 07:08:53

+0

非常感谢! 'int'对象也不支持赋值太..我应该将它转换为intarray ..因为我可能不得不操作整数数组以及将来.. – Kedar 2011-05-11 07:21:04

3

如果你真的想要做图像处理在Python,尝试Python的图像库*(PIL)在这里找到:http://www.pythonware.com/products/pil/

[* ]请记住,如果你使用这个库,你将不得不使用Python 2.x而不是3.x,不幸的是目前很多功能强大的python库都是如此。

+0

我只是想写我的第一个代码...但是如果我必须执行任何操作,请务必使用该库..阅读文档..似乎非常有用..谢谢! – Kedar 2011-05-12 17:16:45