当前位置: 首页 > 知识库问答 >
问题:

从图像中裁剪出倾斜框的有效方法是什么?

淳于泓
2023-03-14

图片:

我有边界多边形的坐标(不是一个精确的矩形)。如何以有效的方式从图像中旋转和提取测量仪?

array([[337, 300],
       [574, 348],
       [567, 378],
       [329, 337]], dtype=int32)

我已经能够通过以下方式旋转图像

(h, w) = im.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(im, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)

但这也改变了box的坐标。

预期输出 :

共有1个答案

商弘义
2023-03-14

我认为您需要从以下四点开始进行透视变换:

到此:

#!/usr/bin/env python3

import cv2

# Set width and height of output image
W, H = 600, 200

# Load input image
img = cv2.imread('speedo.png')

# Define points in input image: top-left, top-right, bottom-right, bottom-left
pts0 = np.float32([[337,300],[574,348],[567,378],[329,337]])

# Define corresponding points in output image
pts1 = np.float32([[0,0],[W,0],[W,H],[0,H]])

# Get perspective transform and apply it
M = cv2.getPerspectiveTransform(pts0,pts1)
result = cv2.warpPerspective(img,M,(W,H))

# Save reult
cv2.imwrite('result.png', result)

使用ImageMagick可以更简单地做同样的事情,ImageMagick安装在大多数Linux发行版上,可用于macOS和Windows。在终端或命令提示符下,您只需运行:

magick speedo.png -distort perspective '337,300 0,0 574,348 200,0 567,378 200,100 329,337 0,100' -crop 200x100+0+0 result.png

关键词:Python,命令行,shell,ImageMagick,OpenCV,扭曲,透视,扭曲,仿射,4点,4-pt,变换,图像,图像处理。

 类似资料:
  • 我试图在从图库中选择图像后使用intent来裁剪图像。以下是我的代码片段 在这里,我使用PICK_IMAGE_REQUEST意图句柄调用上面的代码段 由于我在裁剪后使用了相同的意图,即PICK_IMAGE_REQUEST,可能会出现什么问题

  • 我整理了一些代码来从图像中提取所有字符。我从左到右对字符进行排序,并尝试将每个字符裁剪到单独的图像中。并非所有字符都被正确裁剪,其中一些最终大小为零。

  • 我将<code>背景 1.back_xml: 2.瓷砖.xml 现在,我将back.xml设置为< code >背景以< code>LinearLayout工作正常。 我需要有一个圆角,以及它的边框。但是我只有圆角的边框,而不是图像,我的代码中有什么问题吗? 这是我的照片:

  • 本节,我们将裁剪图像的一部分,然后把其结果绘制到画布上。 图3-2 裁剪图像 绘制步骤 按照以下步骤,裁剪图像的一部分,再把结果绘制到画布: 1. 定义画布上下文: window.onload  = function(){ var canvas  = document.getElementById("myCanvas"); var context  = canvas.getContext

  • 问题内容: 如何使用JavaFX 完成Android ? 我有图像视图: 问题答案: 感谢@TravisF的发布,我实现了最后一个解决方案,以使图像始终具有相同的高度,宽度和位置(中心)。

  • 我需要对matlab中的图像执行以下操作: 加载图像 计算图像的FFT(快速傅立叶变换) 将频率分量移到中心 像follow一样裁剪图像(如果图像分辨率为1000x1000,则图像所需的部分类似于以下坐标:100100800800。这是一个较小的图像。(应用过滤器去除高频的想法) 反向移位 傅里叶逆变换 . . . 我的代码如下所示: 问题是,当我想裁剪图像时,我的功能无法裁剪类型为“复杂双”的图