OPEN CV - 更改像素坐标

时间:2016-09-09 17:29:20

标签: python python-2.7 opencv image-processing transform

如标题所示我有一个图像,其像素坐标我想用数学函数改变。到目前为止,我有以下代码,但由于嵌套循环非常耗时。你有任何建议让它更快吗?要定量,在1200万像素图像上完成整个过程大约需要2-2.5分钟。

imgcor = np.zeros(img.shape, dtype=img.dtype)
                for f in range(rowc):
                    for k in range(colc):
                        offX = k + (f*b*c*(math.sin(math.radians(a))))
                        offY = f + (f*b*d*(math.cos(math.radians(a))))
                        imgcor[f, k] = img[int(offY)%rowc, int(offX)%colc]

P.S。我使用的是opencv 2.4.13和python 2.7

1 个答案:

答案 0 :(得分:0)

可能有办法让numpy为你做一些矢量化工作,但一个简单的加速是每次你循环时不重新计算一些值(我假设a,b,c,并且d在循环中没有变化)。我很好奇加速会是什么,你能报告回来吗?

imgcor = np.zeros(img.shape, dtype=img.dtype)
offX_precalc = b*c*(math.sin(math.radians(a)))
offY_precalc = b*d*(math.cos(math.radians(a)))
for f in range(rowc):
    for k in range(colc):
        offX = k + (f*offX_precalc)
        offY = f + (f*offY_precalc)
        imgcor[f, k] = img[int(offY)%rowc, int(offX)%colc]

好吧,因为上面的速度太慢了,我添加了一些矢量化,如果它更快,我很好奇:

imgcor = np.zeros(img.shape, dtype=img.dtype)
off_base = b*(math.sin(math.radians(a)))
offX_precalc = off_base*c
offY_precalc = off_base*d+1

for f in range(rowc):
    offY = int(f*offY_precalc)%rowc
    offXs = [int(k + (f*offX_precalc))%colc for k in range(colc)]
    imgcor[f,:] = img[offY, offXs]