我怎样才能加速视频处理:python

时间:2015-01-05 08:08:27

标签: python video image-processing video-streaming

import time
import picamera
import picamera.array
import numpy as np
import cv2

clahe = cv2.createCLAHE(clipLimit= 8, tileGridSize=(4,4))

with picamera.PiCamera() as camera:
with picamera.array.PiRGBArray(camera) as stream:
    camera.resolution = (320,240)

    while True:
        camera.capture(stream,'bgr',use_video_port=True)
        med1 = cv2.medianBlur(stream.array,5)
        med3 =clahe.apply(med1)
        img1=med3
        height, width = med3.shape
        for i in range(0,height):
            for j in range(0,width):
                if ((img1[i, j] >= [75,75,75]).all() and (img1[i, j] <[110,110,110]).all()):
                    med3[i,j]= med3[i,j]-8
                elif((img1[i, j] >= [125,125,125]).all() and (img1[i, [140,140,140]).all()):
                    med3[i,j]= med3[i,j]+2
        cv2.imshow('img.jpg',med3)
        cv2.waitKey(100)
        if cv2.waitKey(1) & 0xFF == ord('a'):
            cv2.imwrite('2015_01_05_43.jpg',med2)
            cv2.imwrite('2015_01_05_44.jpg',med3)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        stream.seek(0)
        stream.truncate()

我试图操纵视频中的每个帧的一些像素。这个过程正在发挥作用但输出太慢了。我知道这种情况正在发生,因为它必须扫描每一帧的所有像素。任何人都可以帮助以更快的方式完成相同的过程。有没有其他解决方案来解决这个问题。

1 个答案:

答案 0 :(得分:0)

看起来你的第一选择应该是使用它是一个numpy数组的事实,并使用numpy的切片和广播能力而不是迭代像素。这将基本上相同,但在numpy的c代码级别,针对这些事情进行了优化。 例如,具有第一个条件的循环可以仅用:

替换
img1[(img1 >= [75,75,75]) & (img1 <= [110,110,110])] -= 8