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中裁剪平行四边形图像[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python opencv 裁剪图像中最大的对象?
opencv-python:如何用边界框坐标裁剪图像[重复]