擅长:python、mysql、java
<p>可以将环形缓冲区作为numpy数组,方法是将大小加倍并切片:</p>
<pre><code>clipsize = clip.size[::-1]
depth = 30
ringbuffer = np.zeros((2*depth,) + clipsize)
framecounter = 0
def new_filtered_output(image):
global ringbuffer, framecounter
inter_frame = somefunction(image)
idx = framecounter % depth
ringbuffer[idx] = ringbuffer[idx + depth] = inter_frame
buffer = ringbuffer[idx + 1 : idx + 1 + depth]
framecounter += 1
# Apply kernel
output = dc + np.sum([buffer[j]*kernel[j] for j in range(depth)], axis=0)
return output
</code></pre>
<p>现在,您不必每帧都将deque转换为numpy数组(以及每个循环迭代….)。在</p>
<p>如注释中所述,您可以更有效地应用内核:</p>
^{pr2}$
<p>或者:</p>
<pre><code>output = dc + np.tensordot(kernel, buffer, axes=1)
</code></pre>