Node.js 如何使用Hough变换选择要查找收据的行?

Node.js 如何使用Hough变换选择要查找收据的行?,node.js,opencv,image-processing,Node.js,Opencv,Image Processing,我正在用代码从图像中裁剪收据。我用“OpenCV4NoDEJS”模块开发JavaScript中的解决方案,但是我习惯于Python和C++。 我见过不同的方法,如,但这种解决方案在嘈杂的背景下不起作用,如果检测到的轮廓不是连续的。所以我决定用Hough变换编写一个代码 算法为:图像>灰度>高斯模糊>放大>canny>Hough概率 在一些图像中,我有一个很好的结果,我只需要过滤最好的线,以获得4个角,并裁剪图像。在其他地方,我有很多噪音。如何筛选行以最适合收据 以下是一些图像示例: 因为您没

我正在用代码从图像中裁剪收据。我用“OpenCV4NoDEJS”模块开发JavaScript中的解决方案,但是我习惯于Python和C++。 我见过不同的方法,如,但这种解决方案在嘈杂的背景下不起作用,如果检测到的轮廓不是连续的。所以我决定用Hough变换编写一个代码

算法为:图像>灰度>高斯模糊>放大>canny>Hough概率

在一些图像中,我有一个很好的结果,我只需要过滤最好的线,以获得4个角,并裁剪图像。在其他地方,我有很多噪音。如何筛选行以最适合收据

以下是一些图像示例:


因为您没有发布原始图像,我只能在脑海中给您一些想法。
首先,您可以根据某些线条的角度对其进行过滤,您想要的线条应该在0度和90度左右,因此应该删除30度或45度左右的线条。
其次,在您的结果中,它似乎是您想要从中获得更多结果的真实边界,因此您可以选择最密集的边界。

在这方面我可以帮你。

因为你没有发布原始图像,我只能在心里给你一些想法。
首先,您可以根据某些线条的角度对其进行过滤,您想要的线条应该在0度和90度左右,因此应该删除30度或45度左右的线条。
其次,在您的结果中,它似乎是您想要从中获得更多结果的真实边界,因此您可以选择最密集的边界。

这一部分可能会对您有所帮助。

您遇到的问题并不难。在不做太多更改的情况下,您可以尝试在HoughLines()OpenCV函数中使用“threshold”参数,以便只返回最突出的行。您应该尝试删除任何不可能包含文本的区域。从“threshold”参数中,我选择了一个适用于我的示例的平均值(我有100多张票)一些阈值改善了一些图像,但在其他图像中效果更差(如果有任何想法可以从图像本身计算阈值的话)。这不是一个困难的问题。在没有太多变化的情况下,可以尝试在HoughLines()中使用“threshold”参数OpenCV函数,以便只返回最突出的行。您应该尝试删除任何不可能包含文本的区域。从“阈值”参数中,我选择了一个适用于我的示例的平均值(我有100多张票证),一些阈值改善了一些图像,但在其他图像中效果更差(如果有从图像本身计算阈值的想法的话)。角度的想法很好,我确实从我的样本中减少了很多噪音。此外,我正在检查这篇文章,当我有很多线接近时,它看起来很好。但是我怀疑线是否没有那么接近(如第二个示例),也许一个预过滤器会有帮助。无论如何,我稍后会尝试上传原稿和更多样本。我认为你应该忽略不是很近的线条,在第二个例子中,有很多线条,但大多数都是离散的,你可以看到真实的边界比其他的更密集。角度的想法很好,我已经确定了从我的样本中减少很多噪音。另外,我正在检查文章,当我有很多行接近时,它看起来很好。但我怀疑行是否没有那么接近(如第二个示例),也许预过滤器会有所帮助。无论如何,我会尝试稍后上传原件和更多样本。我认为您应该忽略不太接近的线条,在第二个示例中,有很多线条,但大多数都是离散的,您可以看到真实的边框比其他线条更密集。