gpt4 book ai didi

python - 如何在 Python 中使用 OpenCV 拉直图像的旋转矩形区域?

转载 作者:IT老高 更新时间:2023-10-28 22:17:04 25 4
gpt4 key购买 nike

下面的图片会告诉你我想要什么。

我有图像中矩形的信息(宽度、高度、中心点和旋转度)。现在,我想编写一个脚本将它们剪下来并将它们保存为图像,但也要将它们拉直。如,我想从图像内部显示的矩形转到外部显示的矩形。

我正在使用 OpenCV Python。 告诉我实现此目的的方法。

展示一些代码,因为 OpenCV Python 的示例很难找到。

Example Image

最佳答案

您可以使用 warpAffine函数围绕定义的中心点旋转图像。可以使用 getRotationMatrix2D 生成合适的旋转矩阵(其中 theta 的单位是 degrees)。

Start Image After finding the desired rectangle

然后您可以使用 Numpy slicing剪切图像。

Rotated Image Result

import cv2
import numpy as np

def subimage(image, center, theta, width, height):

'''
Rotates OpenCV image around center with angle theta (in deg)
then crops the image according to width and height.
'''

# Uncomment for theta in radians
#theta *= 180/np.pi

shape = ( image.shape[1], image.shape[0] ) # cv2.warpAffine expects shape in (length, height)

matrix = cv2.getRotationMatrix2D( center=center, angle=theta, scale=1 )
image = cv2.warpAffine( src=image, M=matrix, dsize=shape )

x = int( center[0] - width/2 )
y = int( center[1] - height/2 )

image = image[ y:y+height, x:x+width ]

return image

请记住,dsize输出 图像的形状。如果补丁/角度足够大,如果使用原始形状(为了简单起见),边缘会被切断(比较上图)。在这种情况下,您可以为 shape(放大输出图像)和切片引用点(此处为 center)引入缩放因子。

上面的函数可以如下使用:

image = cv2.imread('owl.jpg')
image = subimage(image, center=(110, 125), theta=30, width=100, height=200)
cv2.imwrite('patch.jpg', image)

关于python - 如何在 Python 中使用 OpenCV 拉直图像的旋转矩形区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11627362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com