小编Yas*_*sal的帖子

在Python中手动编写warpAffine代码

我想不使用库函数来实现仿射变换。我有一个名为“transformed”的图像,我想应用逆变换来获取“img_org”图像。现在,我正在使用自己的基本 GetBilinearPixel 函数来设置强度值。但是,图像没有正确转换。这就是我想到的。:

这是图像(“transformed.png”):

在此输入图像描述

这是图像(“img_org.png”):

在此输入图像描述

但我的目标是产生这样的图像: 在此输入图像描述

您可以在此处查看变换矩阵:

pts1 = np.float32( [[693,349] , [605,331] , [445,59]] )
pts2 = np.float32 ( [[1379,895] , [1213,970] ,[684,428]] )
Mat = cv2.getAffineTransform(pts2,pts1)
B=Mat
Run Code Online (Sandbox Code Playgroud)

代码:

img_org=np.zeros(shape=(780,1050))
img_size=np.zeros(shape=(780,1050))

def GetBilinearPixel(imArr, posX, posY):
return imArr[posX][posY]

for i in range(1,img.shape[0]-1):
    for j in range(1,img.shape[1]-1):
        pos=np.array([[i],[j],[1]],np.float32)
        #print pos
        pos=np.matmul(B,pos)
        r=int(pos[0][0])
        c=int(pos[1][0])
        #print r,c
        if(c<=1024 and r<=768 and c>=0 and r>=0):
            img_size[r][c]=img_size[r][c]+1
            img_org[r][c] += GetBilinearPixel(img, i, j)

for i in range(0,img_org.shape[0]):
    for j in range(0,img_org.shape[1]):
        if(img_size[i][j]>0):
            img_org[i][j] = img_org[i][j]/img_size[i][j]
Run Code Online (Sandbox Code Playgroud)

我的逻辑有错吗?我知道我应用了非常低效的算法。我是否缺少任何见解?或者你能给我任何其他可以正常工作的算法吗? …

python opencv image image-processing opencv3.0

2
推荐指数
1
解决办法
4742
查看次数

标签 统计

image ×1

image-processing ×1

opencv ×1

opencv3.0 ×1

python ×1