为了方便后面目标识别的处理, 将投影求分类的函数嵌入进 fft 滤波函数中, 共同组成 fttmovedetect 函数, 利用 python 的切片功能实现投影
代码:
- arryAllW[:] = arryAllW[:] + arryH[:]
- arryAllH[:] = arryAllH[:] + arryL[:]
为在投影中分割多目标区域, 引入两个变量: Yindexh 与 Yindexl, 用于记录分界点的个数, 其中分界点由 python 中的卷积函数求出:
- arryAllHH[0, :] = np.convolve(arryAllHH[0, :], conMask, mode='same') # numpy 函数中的卷积函数库
- arryAllHL[0, :] = np.convolve(arryAllHL[0, :], conMask, mode='same') # numpy 函数中的卷积函数库
又引入两个数组: yArryh[:] 与 yArryl[:] 用于记录分界点的位置, 分界点位置的判断由以下语句实现:
- for a in range(1, int(High / SteppingH), 1):
- if arryAllHH[0, a]> 0 and arryAllHH[0, (a - 1)] <= 0:
- yArryh[0, Yindexh] = a
- Yindexh = Yindexh + 1
- if arryAllHH[0, a] <= 0 and arryAllHH[0, (a - 1)]> 0:
- yArryh[0, Yindexh] = a - 1
- Yindexh = Yindexh + 1
- if arryAllHL[0, a]> 0 and arryAllHL[0, (a - 1)] <= 0:
- yArryl[0, Yindexl] = a
- Yindexl = Yindexl + 1
- if arryAllHL[0, a] <= 0 and arryAllHL[0, (a - 1)]> 0:
- yArryl[0, Yindexl] = a - 1
- Yindexl = Yindexl + 1
接下来根据得到的分界点的数量与位置对运动图像进行分割:
- for b in range(0, Yindexl, 2):
- frameshow = cv2.rectangle(frameshow, (xArryl[0,i]*SteppingW, yArryl[0,b]*SteppingH) , (xArryl[0, i+1]*SteppingW, yArryl[0,b+1]*SteppingH), (200, 10, 140), 6)
多目标检测完成, 效果如图:
来源: https://www.cnblogs.com/lvfengkun/p/11954889.html