numpy.sum

时间:2018-10-29 16:40:55

标签: python numpy opencv

我正在用OpenCV在python中编写一个计算机视觉应用程序,我需要(经常)在同一图像的不同矩形区域上计算总和。一种计算方法是通过np.sum天真的方法,另一种方法是使用Integral Image,这样我只需要查找四个值即可计算总和。

我要测试的(单元测试)代码如下:

    self.input_image = np.random.rand(self.rows, self.cols)
    tic = time.clock()
    for i in range(cnt):
        np.sum(self.input_image[0:self.rows, 0:self.cols])
    toc = time.clock()
    t_direct_ms = ((toc-tic)/cnt)*1000.0
    print ("direct time: %.5f ms" % t_direct_ms)

    # self.ii._sum_image = cv2.integral(input_image)
    tic = time.clock()
    for i in range(cnt):
        self.ii.sum_region(0, self.rows, 0, self.cols)
    toc = time.clock()
    t_integral_ms = ((toc - tic) / cnt)*1000.0
    print ("lookup time: %.5f ms" % t_integral_ms)

    print ("Speed ratio direct/integral: %.2f" % (t_direct_ms / t_integral_ms))

def sum_region(self, row_start, row_end, col_start, col_end):
    A = self._sum_image[row_end, col_end]
    B = self._sum_image[row_start, col_end]
    C = self._sum_image[row_end, col_start]
    D = self._sum_image[row_start, col_start]
    return A - B - C + D

self._sum_image = cv2.integral(image)

结果是相同的(使用随机输入的图像进行测试),但是,我对大小为(300,80)的浮动图像的加速仅为15:

direct time: 0.01017 ms 
lookup time: 0.00069 ms 
Speed ratio direct/integral: 14.84

我期望更快的速度,因为积分图像仅包含一些查找,并且numpy.sum必须求和超过24000个值。

numpy的内部结构快得多吗?还是我的测量方式有问题?

0 个答案:

没有答案