raspberry python imgproc模块保存
大家好,我使用了一个名为raspberry python imgproc模块保存,python,image,raspberry-pi,python-imaging-library,Python,Image,Raspberry Pi,Python Imaging Library,大家好,我使用了一个名为imgproc的python库,这样我就可以从网络摄像头将图像拍摄到树莓pi上。但是我不知道如何将它保存到.jpg文件中。我到处都研究过,但到处都找不到答案。图书馆的链接是。我已经尝试了所有的方法,但我没有一个pi凸轮,这是正确的方法。我现在的密码是: import socket import time from imgproc import * cam = Camera(320, 240) host = "example.com" port = 8888 s = soc
imgproc
的python库,这样我就可以从网络摄像头将图像拍摄到树莓pi上。但是我不知道如何将它保存到.jpg
文件中。我到处都研究过,但到处都找不到答案。图书馆的链接是。我已经尝试了所有的方法,但我没有一个pi凸轮,这是正确的方法。我现在的密码是:
import socket
import time
from imgproc import *
cam = Camera(320, 240)
host = "example.com"
port = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ri = socket.gethostbyname(host)
s.connect((ri , port))
x = True
while x:
img = cam.grabImage()
例如,可以使用PIL或其他类似的库。然而,如果你想让它快一点,就有一些问题 挑战来自
imgproc
API,它似乎不允许对图像数据本身进行任何快速访问。唯一的方法是使用图像
对象的方法,例如img[x,y]
。这看起来非常像numpy
数组,但不幸的是它们没有任何共同之处
imgproc
是一个构建在C库上的非常薄的包装器。查看一下imgproc.py
,会很有启发性,因为它显示了所有可用的绑定
最有可能的是,你将不得不逐像素构建图像,这不是很快。例如:
img_array = numpy.array([ [ img[x,y] for x in range(img.width) ] for y in range(img.height) ] , dtype='uint8')
获得图像阵列后,可以将其转换为PIL图像并保存图像:
pil_img = Image.fromarray(img_array)
pil_img.save('my_image.jpg')
为此,您需要numpy
和Image
模块(PIL)。这种方法不是很快。另一种方法是创建一个空的numpy
数组并填充它:
img_array = numpy.empty((img.height, img.width, 3), dtype='uint8')
for y in range(img.height):
for x in range(img.height):
img_array[y,x] = img[x,y]
只有通过测试才能发现哪一个更慢
原则上,通过在库周围添加更强大的包装函数来扩充库并不困难,使其以更好的格式返回二进制缓冲区内容,但这样做需要C语言和python语言的知识。如果您对PNG图像满意,可以使用PyPNG。它是一个纯python模块,因此安装非常简单,您只需将单个模块复制到您想使用它的任何地方。当然,PNG图像占用了更多的空间。我建议您创建一个新问题,例如“如何在不使用凹凸或PIL的情况下在Python3.4中保存图像”。我知道用netPBM或BMP做起来相对简单,但如果你提出一个新问题,可能还有其他人能给你更好的答案!