0

我目前正在研究一个在树莓派上捕捉和处理照片的项目。这些照片是 6000X4000 约 2 mb,来自尼康 D5200 相机。一切工作正常,我已经在 J​​ava 中进行了概念验证,并希望将其转换为 python 或 C,具体取决于哪种语言在树莓派上更快。

没有问题是图像需要裁剪和调整大小,这在覆盆子中需要很长时间。在java中读取图像、裁剪和写入新图像的整个过程大约需要2分钟。

我也尝试过 ImageMagick,但在命令行中这甚至需要 3 分钟。

我使用一个小的 python 脚本将其缩短到 20 秒,但这对我的项目来说仍然有点长。

目前我正在安装 OpenCV 以检查这是否更快,这个过程大约需要 4 个小时,所以我想同时我可以在这里问一个问题。

有没有人有任何好主意或库来加快裁剪和调整图像大小的过程。

以下是我使用的python代码

import Image

def crop_image(input_image, output_image, start_x, start_y, width, height):
    """Pass input name image, output name image, x coordinate to start croping, y     coordinate to start croping, width to crop, height to crop """
input_img = Image.open(input_image)
box = (start_x, start_y, start_x + width, start_y + height)
output_img = input_img.crop(box)
output_img.save(output_image +".jpg")
def main():
   crop_image("test.jpg","output", 1000, 0, 4000, 4000)

if __name__ == '__main__': main()
4

2 回答 2

0

你有没有试过jpegtran。它提供了 jpeg 的无损裁剪。它应该在libjpeg-progs包装中。我怀疑解码图像以裁剪它,然后重新编码它对于 SD 卡来说太多了。

于 2013-08-29T13:05:18.687 回答
0

第一种方法(没有精灵)

import pyglet
#from pyglet.gl import *

image = pyglet.resource.image('test.jpg')
texture = image.get_texture()
## -- In case you plan on rendering the image, use the following gl set:
#gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST)
texture.width = 1024
texture.height = 768
texture.get_region(256, 192,771, 576)
texture.save('wham.png') # <- To save as JPG again, install PIL

第二次尝试(使用精灵,未完成)

import pyglet, time
start = time.time() #DEBUG
texture = pyglet.image.load('test.jpg')
print('Loaded image in',time.time()-start,'sec') #DEBUG
sprite = pyglet.sprite.Sprite(texture)
print('Converted to sprite in',time.time()-start,'sec') #DEBUG
print(sprite.width) #DEBUG
# Gives: 6000
sprite.scale = 0.5
print('Rescaled image in',time.time()-start,'sec') #DEBUG
print(sprite.width) #DEBUG
# Gives: 3000

这两种解决方案最终在一台极其缓慢的 PC 上运行大约 3-5 秒,在 Windows XP 下运行一个糟糕的机械磁盘。我什至无法计算正在运行的应用程序的数量,包括活动病毒扫描等。但请注意,我可以'不记得如何将精灵保存到磁盘,您需要访问AbstractImage精灵中的数据容器才能将其取出。

您将受到磁盘/内存卡 I/O 的严重限制。我的图像是 16MB 6000x4000 像素。我很惊讶它的加载速度快到 3 秒。

于 2013-08-29T09:50:32.520 回答