【问题标题】:Making an image curvy使图像弯曲
【发布时间】: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


【解决方案1】:

最通用的解决方案是使用remap。有关转换此图像的示例脚本,请参阅 stackoverflow 上的 this answer

到这里:

那些以红色显示的控制点定义了转换。您将第一组点设置在直线上,将目标点设置在曲线上。

【讨论】:

    猜你喜欢
    • 2018-08-21
    • 1970-01-01
    • 2015-08-29
    • 2015-08-24
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    相关资源
    最近更新 更多