【发布时间】:2019-12-10 02:24:33
【问题描述】:
我正在尝试转换图像,使直线/框变得弯曲。
不幸的是,我只能使用仿射变换来改变图像的视角。如果它们之前平行,这只会使线不平行,线保持笔直。不知道哪些函数可以带来曲线变换。
hz_error,vert_error = 10,5
w,h,_=img.shape
src = np.float32([(0,0),(w,0),(w,h),(0,h)])
dst = np.float32([(-hz_error,-vert_error),(w+hz_error,-vert_error),(w-hz_error,h+vert_error),(0,h)])
M = cv2.getPerspectiveTransform(src, dst)
warped = cv2.warpPerspective(img, M, (w+20, h+20))
输入图像 输出图像 我需要的输出应该是弯曲的图像。
一个理想的输出示例, 这里的边缘是“弯曲的”而不是笔直的。
【问题讨论】:
-
有无数种变换可以使线条弯曲。知道它们应该如何弯曲吗?
-
使用 4 点透视变换与您的仿射非常相似,但使用 4 点而不是 3 点。这将根据您想要的“曲线”结果倾斜线条。请注意,您对“curvy”的使用是错误的。它是倾斜的(平行四边形)而不是弯曲的。
-
@fmw42 由于变换的性质,我编写的代码仅生成四边形。如果我们在一条直线上应用透视变换,它仍然是一条直线。我想要一个可以使直线弯曲的变换。我添加了一个示例曲线图像。
-
@CrisLuengo 我添加了一个理想的输出图像示例。它基本上是从真实图像中裁剪出来的。
-
请参阅下面的
fireant解决方案重新映射。
标签: python opencv image-processing