Ddddd4431 2023-01-01 21:54 采纳率: 90%
浏览 24
已结题

HOF光流直方图程序简化


 flow = cv2.calcOpticalFlowFarneback(prvs,next, None, 0.5, 5, 15, 5, 5, 1.1, 0)    # 输出是x,y方向的矢量
    # a=print('a',flow[:,:,0])
    # b=print('b',flow[:,:,1])
    c=[]
    def hoof(flow):  # flow.shape=[720.1280.2]
        l = np.zeros(6)
        for idx in flow:
            for j in idx:
                jz=np.sqrt((j[0])**2 + j[1]**2)    # 幅值
                jq=np.arctan(j[1]/j[0])            # 角度
                if jq >= -180 and jq < -150:
                    l[5] += 1
                elif jq >= -150 and jq < -120:
                    l[4] += 1
                elif jq >= -120 and jq < -90:
                    l[3] += 1
                elif jq >= -90 and jq < -60:
                    l[2] += 1
                elif jq >= -60 and jq < -30:
                    l[1] += 1
                elif jq >= -30 and jq < 0:
                    l[0] += 1
                elif jq >= 0 and jq < 30:
                    l[0] += 1
                elif jq >= 30 and jq < 60:
                    l[1] += 1
                elif jq >= 60 and jq < 90:
                    l[2] += 1
                elif jq >= 90 and jq < 120:
                    l[3] += 1
                elif jq >= 120 and jq < 150:
                    l[4] += 1
                elif jq >= 150 and jq < 180:
                    l[5] += 1
        return l

对得到的稠密光流结果做一个直方图统计,x横轴按照每+-30度为一个区间,将360度化分为6个区间。y数轴为次数。
这里的问题是,使用简单的for循环和if语句来完成所有这些操作需要很长时间,想问问大家有没有 简化 或者 提速 的办法?

  • 写回答

2条回答 默认 最新

  • youcans_ 人工智能领域优质创作者 2023-01-02 11:43
    关注

    整个 if then 循环可以简化为:

    l[abs(jq//30] += 1

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月10日
  • 已采纳回答 1月2日
  • 创建了问题 1月1日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助