我一直在使用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版本完全不同。谁能帮我理解为什么? :■
非常感谢,并且很高兴最终正式加入堆栈社区。 ^^ ;;