如何在Python中使用OpenCV找到图片上最大的矩形?

时间:2018-03-22 19:11:39

标签: python opencv bounding-box cv2 opencv-contour

我正在进行一个基于字母和数字分类的学校项目,因为我一直在使用卷积神经网络。申请将是对付款单上的一些数据的识别。但是,为了从付款单中提取数据,我需要先识别它。它是一个矩形对象,我需要得到它的精确边界框。我将扫描这些付款单,背景将始终为白色。 payment slip 所以我的问题是我知道如何用CNN-s检测字母,数字,但我不知道在Python中使用OpenCV。我听说使用OpenCV检测矩形非常容易,我已经尝试了StackOverflow的一些代码,但它们大多给了我整张纸作为我不需要的边界框。我只需要最大的红色矩形(UNIVERZALNI NALOGZABPENĆANJE下面的那个)。我真的很抱歉我没有为此问题编写任何代码,但我真的不知道这些方法在OpenCV中做了什么,如果我开始学习OpenCV,那将花费一些时间,不幸的是我不会有....如果有人至少有一些帮助我会非常感激

desired 这是我真正想要的结果,但直到现在才开始管理。

1 个答案:

答案 0 :(得分:1)

<强>声明

我将为您提供最简单的(至少我认为的)解决方案。

在您完全理解之后,您可以继续部署更高级的东西。我的答案是作为指南,你负责代码。

编辑I:

抱歉,我错过了一个观点。您希望首先对图像进行灰度。

此问题最常见的初始阶段是cleaning out the noise。根据您的应用程序,这可以是一个可选的初始阶段。您可以执行不同的操作来帮助您摆脱不必要的操作。

此后,您可以find the edges获得噪音较小的图片。这有助于我们看到图像的轮廓。

从这里开始,我们在边缘图像中开始looking for contours

现在,我们已经获得了轮廓,现在是时候对它们进行this和/或this分析,看看我们是否可以确定我们想要的那个。

最简单的初始分析可以是删除/忽略面积小于某个阈值的轮廓。一旦你观察了结果,就可以继续将该区域与其他像长宽比结合起来,看看你得到了什么。

经过一些试验和错误,我们设法隔离了所需的轮廓,你可以继续在它周围绘制一个边界矩形。

两分钱:

就像CNN模型创建一样,图像处理是一个反复试验的任务。对于我上面列出的每种不同的方法,你必须尝试不同的参数,看看哪一个有意义。

您可以使用其他替代方案。说而不是寻找边缘,也许您可​​以在灰度缩放后立即尝试thresholding the imagesmooth out the image

欢呼,快乐的编码:)