如何加速Python中的视频处理

时间:2015-07-26 16:32:18

标签: python matlab opencv image-processing video-processing

我一直在使用MATLAB中的视频处理算法,并希望将其传输到Python中,以便最终将其移动到Raspberry Pi。

显然,MATLAB中的某些函数 - 比如“imfilter”,在Python中无法复制,所以我最终编写了一些代码。到目前为止的代码是 如下:

    import numpy as np
    import cv2
    ker = np.array((...))              # 9 x 9 array - to be used as a kernel
    cap = cv2.VideoCapture(0)
    cap.set(3, 320)
    cap.set(4, 240)
    while(1):
        ret, frame = cap.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # the following lines are for recreating MATLAB imfilter in Python
        x_start = 0
        y_start = 0
        x_lim = len(gray[:,1]) - len(ker)
        y_lim = len(gray[1,:]) - len(ker)
        x = x_start
        y = y_start
        imfil = np.zeros([len(gray[:,1]), len(gray[1,:])])

        for x in range(x_start,x_lim):
             for y in range(y_start,y_lim):
                  z = ker * gray[x:x+len(ker),y:y+len(ker)]
                  sum_z = sum(sum(z))
                  imfil[x+1,y+1] = sum_z
                  y = y + 1

    cv2.imshow('original', gray)
    cv2.imshow('orientation', imfil)

    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cv2.destroyAllWindows()
cap.release()

最终结果与我在MATLAB中得到的结果相似,但问题是处理速度太慢。我有什么地方可以修改以提高跑步速度吗?

P.S。我尝试过使用scipy.ndimage.correlate和cv2.filter2D作为替代方案,但给出的结果与MATLAB版本完全不同。谁能帮我理解为什么? :■

非常感谢,并且很高兴最终正式加入堆栈社区。 ^^ ;;

0 个答案:

没有答案