Tyo_ 2019-04-24 20:35 采纳率: 25%
浏览 1688
已结题

Python运行vibe算法过慢

现在在做毕设,有一部分要用到前景目标提取,我打算用VIBE算法来做,但是同样的算法,Python运行时初始化都要20-50s,我朋友用matlab基本就是1s内最多1s多一点就能完成初始化,虽然Python运行慢,但是也不至于慢这么多吧,而且理论上vibe算法的运行速度应该是比较快的,大佬们看一下是不是写的代码的问题。。。

def initial_background(I_gray, N):
    t1 = cv2.getTickCount()
    I_pad = np.pad(I_gray, 1, 'symmetric')#对称填充
    height = I_pad.shape[0]
    width = I_pad.shape[1]
    samples = np.zeros((height, width, N))
    t2 = cv2.getTickCount()
    time = (t2 - t1) * 1000 / cv2.getTickFrequency()
    print(time)
    for i in range(1, height - 1):
        for j in range(1, width - 1):
            for n in range(N):
                x, y = 0, 0
                while (x == 0 and y == 0):
                    x = np.random.randint(-1, 1)
                    y = np.random.randint(-1, 1)
                ri = i + x
                rj = j + y
                samples[i, j, n] = I_pad[ri, rj]
    t3 = cv2.getTickCount()
    time2 = (t3 - t1) * 1000 / cv2.getTickFrequency()
    print(time2)
    samples = samples[1:height - 1, 1:width - 1]
    return samples

上面是Python的初始化部分代码,大佬们帮忙看看这部分代码有哪些可以优化的。matlab代码我看不懂,也不知道该发哪个,第一次在CSDN上问问题,不知道会不会有人回答。。。

  • 写回答

3条回答 默认 最新

  • 超级马铃薯 2022-02-22 16:23
    关注

    我改写了一下,效果一样速度应该可以快100倍吧

    
        def __init_params(self, grayFrame):
            for k in range(self.__defaultNbSamples):
                c = np.random.randint(-1,2,size=(self.__Height,self.__Width))
                self.__samples[k] = np.maximum(grayFrame + c, 0)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月7日
  • 已采纳回答 3月15日

悬赏问题

  • ¥20 qt中connect两个signal
  • ¥20 pix2pixHD运行测试命令时出现数据类型错误无法反向传播的问题
  • ¥15 python处理Excel符合条件的行自动填写数据分类
  • ¥15 汇编hook举例并讲解(通俗易懂,学习用)
  • ¥20 用c++语言模拟键盘电子琴设计
  • ¥15 STM32cubemx生成keil工程,有问题与正常的情况不同,求解!
  • ¥15 如何自动点击银行app的安全键盘,实现密码自动输入
  • ¥15 关于四边形重叠的问题
  • ¥15 用verilog语言设计一个简易的八音符电子琴,可通过按键输入来控制音响。演奏时可以选择是手演奏(由键盘输入)或自动演奏已存入的乐曲。能够自动演奏多首乐曲,且每首乐曲可重复演奏
  • ¥15 sap gui脚本每次到导出Excel的时候就停住不动。不会另存为。