树莓派 Python 图像处理模块保存
你好,我正在使用一个叫做 imgproc
的Python库,这个库可以让我从网络摄像头获取图像到树莓派上。但是我不知道怎么把这些图像保存为 .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()
1 个回答
0
你可以使用像PIL这样的库来实现这个功能,或者其他类似的库。不过,如果你想要速度快一点,就会遇到一些问题。
问题主要出在imgproc
这个API上,它似乎不允许快速访问图像数据。获取图像数据的唯一方法是使用Image
对象的__getitem__
方法,比如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都有一定的了解。