作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
下面的图片会告诉你我想要什么。
我有图像中矩形的信息(宽度、高度、中心点和旋转度)。现在,我想编写一个脚本将它们剪下来并将它们保存为图像,但也要将它们拉直。如,我想从图像内部显示的矩形转到外部显示的矩形。
我正在使用 OpenCV Python。 请告诉我实现此目的的方法。
请展示一些代码,因为 OpenCV Python 的示例很难找到。
最佳答案
您可以使用 warpAffine
函数围绕定义的中心点旋转图像。可以使用 getRotationMatrix2D
生成合适的旋转矩阵(其中 theta
的单位是 degrees)。
然后您可以使用 Numpy slicing剪切图像。
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/
我是一名优秀的程序员,十分优秀!