知道旋转矩形四个顶点的坐标,如何用opencv实现旋转矩形的裁剪
再做OCR的时候,我想单独把矩形的区域裁剪出来,因此对这个问题进行了一些探索,最后得到的具体步骤如下:文章来源:https://www.toymoban.com/news/detail-558148.html
- 使用cv2.minAreaRect()函数获取旋转矩形的中心点、宽度、高度和旋转角度信息。
- 使用cv2.getRotationMatrix2D()函数获取旋转矩阵。
- 使用cv2.warpAffine()函数根据旋转矩阵进行旋转。
- 使用cv2.getRectSubPix()函数将旋转矩形区域裁剪出来
def crop(image,pos,show=False):
points = np.array(pos,dtype="int32")
# 获取旋转矩形的中心点、宽度、高度和旋转角度信息
rect = cv2.minAreaRect(points)
center, size, angle = rect
print(angle)
print(image.shape)
# 获取旋转矩阵
rotation_matrix = cv2.getRotationMatrix2D(center, angle, 1)
# 根据旋转矩阵进行旋转
rotated_image = cv2.warpAffine(image, rotation_matrix, (image.shape[1],image.shape[0]))
# 将旋转矩形区域裁剪出来
cropped_image = cv2.getRectSubPix(rotated_image, tuple(map(lambda x:int(x),size)), tuple(map(lambda x:int(x),center)))
if show:
plt.figure(dpi=100)
plt.subplot(1,3,1)
plt.imshow(image)
plt.axis('off')
plt.subplot(1,3,2)
plt.imshow(rotated_image)
plt.axis('off')
plt.subplot(1,3,3)
plt.imshow(cropped_image)
plt.axis('off')
plt.show()
return cropped_image
crop(img,result[12][0],show=True)
#[[332.0, 75.0], [432.0, 95.0], [422.0, 146.0], [322.0, 127.0]]
输出结果如下:
达到了我们的目的文章来源地址https://www.toymoban.com/news/detail-558148.html
到了这里,关于使用OpenCV对旋转矩形区域的内容进行裁剪的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!