2024-04-25 22:17:59 发布
网友
Python PIL库允许我使用将图像中的任何四边形映射到矩形
我需要的是一个反作用的函数,即将矩形图像映射到指定的四边形。在
我想这可以通过上面提到的功能来实现:
也就是说,我会找到这样的四元组(图像中的红色部分),使用函数即时转换(大小、四边形、数据)将图像转换为我想要的四边形。问题是我不知道怎么找到红色方块。在
我会很感激任何关于如何找到红色四方形或任何其他方法来映射矩形图像到四边形的想法,只有在可能的情况下使用PIL。在
所以我用一个简单的正向映射来解决这个问题,而不是逆映射,这通常更好,但是在我的应用程序中,我只将矩形映射到比矩形小的四边形,因此通常在变换后的图像中没有孔。代码如下:
def reverse_quad_transform(image, quad_to_map_to, alpha): # forward mapping, for simplicity result = Image.new("RGBA",image.size) result_pixels = result.load() width, height = result.size for y in range(height): for x in range(width): result_pixels[x,y] = (0,0,0,0) p1 = (quad_to_map_to[0],quad_to_map_to[1]) p2 = (quad_to_map_to[2],quad_to_map_to[3]) p3 = (quad_to_map_to[4],quad_to_map_to[5]) p4 = (quad_to_map_to[6],quad_to_map_to[7]) p1_p2_vec = (p2[0] - p1[0],p2[1] - p1[1]) p4_p3_vec = (p3[0] - p4[0],p3[1] - p4[1]) for y in range(height): for x in range(width): pixel = image.getpixel((x,y)) y_percentage = y / float(height) x_percentage = x / float(width) # interpolate vertically pa = (p1[0] + p1_p2_vec[0] * y_percentage, p1[1] + p1_p2_vec[1] * y_percentage) pb = (p4[0] + p4_p3_vec[0] * y_percentage, p4[1] + p4_p3_vec[1] * y_percentage) pa_to_pb_vec = (pb[0] - pa[0],pb[1] - pa[1]) # interpolate horizontally p = (pa[0] + pa_to_pb_vec[0] * x_percentage, pa[1] + pa_to_pb_vec[1] * x_percentage) try: result_pixels[p[0],p[1]] = (pixel[0],pixel[1],pixel[2],min(int(alpha * 255),pixel[3])) except Exception: pass return result
所以我用一个简单的正向映射来解决这个问题,而不是逆映射,这通常更好,但是在我的应用程序中,我只将矩形映射到比矩形小的四边形,因此通常在变换后的图像中没有孔。代码如下:
相关问题 更多 >
编程相关推荐