微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

倾斜图像,可能带有旋转

如何解决倾斜图像,可能带有旋转

在这里看到了一些关于如何使用枕头、open-cv 和 e.t.c 在 python 中倾斜图像的帖子 但是那里提到的所有琐碎的方法都有一个副作用,有时对图像进行裁剪,通常人们选择进行仿射变换的 3 对点会严重影响偏斜本身。

我有一个具体的偏斜任务,当我想取一个不偏斜的几个字符,即一个单词,并通过一些步骤对其进行许多可能的偏斜。

我希望能够创建此链接中的倾斜词skew an image

一些演示:

非偏斜:

enter image description here

向右倾斜 1:

enter image description here

向右倾斜 2:

enter image description here

同样左:

enter image description here

和等

所以我的问题是使用不同长度和宽度的图片进行仿射变换,我不知道在哪里取点以及如何“校正”每个图像的切割。 我的想法是将 3 个角设置为点,并在第一个和第三个点的 y 坐标上加/减一些距离,希望它只会改变图像的“对角线视图”:

        rows,cols,_  img.shape

        if np.random.randint(1,3) == 1:
            pts1 = np.float32([[0,0],[rows-1,[0,cols-1]])
            pts2 = np.float32([[0,0-dist],[,cols-1-dist]])
        else:
            pts1 = np.float32([[0,[rows - 1,cols - 1]])
            pts2 = np.float32([[0,0 + dist],cols - 1 + dist]])

        M = cv2.getAffineTransform(pts1,pts2)

        dst = cv2.warpAffine(background_cv,M,(cols,rows),borderValue=(255,255,255))

但是,或者选择其他一些点:

        x1,y1 = int(rows / 3),int(cols / 3)
        x2,y2 = int(2 * rows / 3),int(cols / 3)
        x3,y3 = int(rows / 3),int(2 * cols / 3)

        if np.random.randint(1,3) == 1:
            pts1 = np.float32([[x1,y1],[x2,y2],[x3,y3]])
            pts2 = np.float32([[x1,y1-dist],y3-dist]])
        else:
            pts1 = np.float32([[x1,y1 + dist],y3 + dist]])

        M = cv2.getAffineTransform(pts1,255))

没有像我预期的那样工作。

我从上面的代码得到的效果

enter image description here

大约是这样,有时图像的切割非常糟糕。 图像具有所有不同的尺寸,因此对于每个图像选择完全正确的点和距离以在上面的图片中进行倾斜是一个问题,还有一些副作用旋转的问题,我不完全理解它为什么会发生,因为我只从 y 轴值中减去距离,所以我理解的变换应该只在水平向左或向右进行。

有人可以帮助弄清楚如何在链接中使用倾斜程度的参数吗? 也许我如何计算发生的副作用旋转并纠正它,或者我如何正确设置我想要的倾斜变换的参数? 也许有更多现有的工具可以做到这一点,或者计算出我需要对单词的集中图像进行倾斜的确切转换?

谢谢,我会很感激的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。