Opencv在python中裁剪平行四边形图像[重复]

Posted

技术标签:

【中文标题】Opencv在python中裁剪平行四边形图像[重复]【英文标题】:Opencv crop a parallelogram image in python [duplicate] 【发布时间】:2016-10-21 05:07:41 【问题描述】:

我正在使用 Python 和 Opencv。我现在正在做一个车牌识别项目。我现在可以像这样识别盘子了:

我得到了一个像这样的“数组”:

[[[542 796]]

 [[965 883]]

 [[547 884]]
   
 [[966 795]]]

问题是:如何用这些坐标裁剪出绑定区域?

由于四个坐标是置换的,它不是一个矩形,所以我不知道如何裁剪出来。

【问题讨论】:

有什么快速的方法可以找到左上角的坐标吗? 如果你的脚本总是以同样的方式返回数组,那么它就是它的固定索引元素。你的轴是如何定义的?如果 x = 0 且 y = 0 是图像的左上角,那么您要查找的点就是数组中的第一个点。 你想扭曲平行四边形以获得一个矩形(这可能会扭曲平行四边形的内部),还是你想在平行四边形周围裁剪一个矩形(这样在你的裁剪中得到一些背景图片)?后者很容易通过 cv::boundingBox 函数实现。 【参考方案1】:

您可以裁剪内部矩形或外部边界矩形。设四个坐标为:-

(x1,y1), (x2,y2)

(x3,y3), (x4,y4)

假设您对外部边界矩形感兴趣,因此没有分割字母,您可以使用以下 ROI 进行简单的裁剪。

int topLeftX = min(x1,x3);
int topLeftY = min(y1, y2);
int width = max(x2, x4) - topLeftX;
int height = max(y3, y4) - topLeftY;
cv::Rect outerRoi(topLeftX, topLeftY, width, height);
cv::Mat roiImage = image(outerRoi); //Note that this will not create a deep copy

如果对从内部适合梯形的最大矩形感兴趣,则应将 min 与 max 交换,反之亦然。

如果你想要一个像 roi 这样的梯形,你应该创建一个蒙版图像。如需进一步的说明,请参阅copying non-rectangular roi opencv

【讨论】:

以上是关于Opencv在python中裁剪平行四边形图像[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenCV (Python) 中使用校正失真裁剪图像

OpenCV python裁剪图像

如何使用 python opencv 裁剪图像中最大的对象?

opencv-python:如何用边界框坐标裁剪图像[重复]

使用 Python 的 OpenCV 函数裁剪图像 [重复]

Python and OpenCV - 为啥用 OpenCV 处理的裁剪图像仍然可以影响原始图像?