打开CV更改像素坐标

2024-09-30 04:27:58 发布

您现在位置:Python中文网/ 问答频道 /正文

正如标题所示,我有一幅图像,我想用数学函数改变它的像素坐标。到目前为止,我有下面的代码可以工作,但由于嵌套循环的缘故,非常耗时。你有什么建议可以加快速度吗?为了定量,在12像素的图像上完成这个过程大约需要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]

另外,我使用的是opencv2.4.13和python2.7


Tags: in图像imgforrangemath像素int
1条回答
网友
1楼 · 发布于 2024-09-30 04:27:58

有一种方法可以让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]

相关问题 更多 >

    热门问题