Ric*_*nop 1 python image-processing
好.长话短说.
我的相机有一个拍照的方法,这就是它的回报:
[160, 120, 3, 10, 1287848024, 96181, 'super long image string']
Run Code Online (Sandbox Code Playgroud)
在我调用这样的方法后,我能够解码字符串并将其保存为图像:
for i in range(0, 10):
image = camProxy.getImageRemote(nameId)
imageWidth = image[0]
imageHeight = image[1]
imageByteArray = image[6]
im = Image.fromstring("YCbCr",(imageWidth,imageHeight),imageByteArray)
fileName = str(time.time())+".jpg"
im.save(fileName, "JPEG")
Run Code Online (Sandbox Code Playgroud)
这很好用,我可以打开保存的图像.
但是,如果我只是将字符串保存到txt文件中,之后我想加载它并像这样保存为图像:
f = open("rawImage.txt", "r")
data = f.readline()
f.close()
# save as image
im = Image.frombuffer("YCbCr",(160,120),data)
im.save("test.jpg", "JPEG")
Run Code Online (Sandbox Code Playgroud)
我得到的几乎是完全绿色的图像.
这是一个示例字符串,我一直遇到问题:
http://richardknop.com/rawImage.txt
以下是该图像的摄像头的getImageRemote()方法的完整输出:
http://richardknop.com/log.txt
任何人都有想法可能出错?这是与编码有关的一些问题吗?所有文件都保存为ASCII,但我也尝试将它们全部保存为UTF-8.
编辑:
我是如何将图像写入文件的?我只是重定向脚本的输出:
python script.py > output.txt
Run Code Online (Sandbox Code Playgroud)
在脚本中我有:
print imageByteArray
Run Code Online (Sandbox Code Playgroud)
我通过将文件模式更改为"r"来实现它"rb".
这是工作代码:
import time
import Image
image_data = [160, 120, 3, 10, 1287848024, 96181, 'really long string from http://richardknop.com/log.txt']
imageWidth = image_data[0]
imageHeight = image_data[1]
imageByteArray = image_data[6]
fout = open("image_data.txt", "wb")
fout.write(imageByteArray)
fout.close()
fin = open("image_data.txt", 'rb')
image_string = fin.read()
fin.close()
im = Image.fromstring("YCbCr",(imageWidth,imageHeight),image_string)
fileName = str(time.time())+".jpg"
im.save(fileName, "JPEG")
Run Code Online (Sandbox Code Playgroud)
我确认你是对的,在这里read并readline没有任何区别,但我仍然建议使用read,因为这说明你的意思.
这是我原来的答案:
更改data = f.readline()到data = f.read(). read抓取整个文件,readline只抓一行.