从字符串中每n个字符有效获取n个字符

时间:2017-10-31 11:16:49

标签: python python-2.7

我正在处理一个包含rgba图像的字符串(每个通道8位),因此字符串的每四个字符就是一个像素,每个字符是该像素的一个通道,例如:

#4x4 pixel image
img_str = 'rgbargbargbargba'

现在想象一个更大的图像,使用以下方法提取alpha通道非常快:

img_str_a = img_str[3::4]
# result applying this to the 4x4 image would be 'aaaa'

对于1350x765图像,这在大约2ms内执行。但现在我需要提取RGB通道,以4x4图像的'rgbrgbrgbrgb'字符串结尾。我试过这个:

img_str_rgb = ''.join('' if i%4 == 0 else char for i, char in enumerate(img_str, 1))

哪个有效,但相同的1350x765图像大约需要700毫秒。这是很多,因为我正在处理视频,所以我需要更低的时间。

1 个答案:

答案 0 :(得分:2)

不要加入单个字符,而是加入子字符串:

img_str_rbg = ''.join(img_str[j:j+3] for j in xrange(0, len(img_str), 4))

更快,你可以使用zip,或者使用python2 izip

from itertools import izip, imap
img_str_rgb = ''.join(imap(''.join, izip(img_str[0::4], img_str[1::4], img_str[2::4])))

对于您的方案,numpy更好:

import numpy as np
img = np.fromstring(img_str,dtype=np.byte).reshape(765,1350,4)
img_alpha = img[:, :, 3]
img_rgb = img[:, :, :3]