我必须编写一个 openCV 应用程序来从图像中提取某些部分(购物单)。我不确定我应该使用哪些过滤器或功能来完成此操作(即去除手等背景噪音)。有人能给我一些提示,哪些功能和过滤器最适合去除这种背景噪音并提取购物账单从图像的一部分。
谢谢
我必须编写一个 openCV 应用程序来从图像中提取某些部分(购物单)。我不确定我应该使用哪些过滤器或功能来完成此操作(即去除手等背景噪音)。有人能给我一些提示,哪些功能和过滤器最适合去除这种背景噪音并提取购物账单从图像的一部分。
谢谢
一般降噪:高斯或中值模糊将帮助您实现低通滤波操作。
事实1:购物账单是黑白的
方法:使用颜色检测。获取图像的 HLS 等效项 - 使用 cvtColor - 并查看亮度通道将对您有所帮助。
事实 2:购物账单有纯白色背景
方法:使用二进制阈值并添加轮廓查找算法 - 使用 findContours - 可以帮助您提取票据区域。
事实3:购物账单有数字
方法:您可以添加 OCR 以过滤掉内部没有任何数字的区域。不过很难实施。
事实 4:购物账单是四字的
方法:形状检测不难实现。我想这方面有很多作品。我曾经用“胡矩比较”的方法成功地识别出正方形。如果你有一张长方形的钞票,可能有开源实现,搜索“检测最大的长方形 opencv”。如果您从不同角度拍摄,请阅读这些论文、代码和教程:
http://users.cecs.anu.edu.au/~nmb/papers/06-PRD.pdf
http://opencv-code.com/tutorials/automatic-perspective-correction-for-quadrilateral-objects/
https://github.com/drewnoakes/quadrilateral-finder
http://aishack.in/tutorials/an-introduction-to-contours/
http://www.scielo.org.mx/pdf/cys/v15n2/v15n2a5.pdf
基本上,您需要以某种方式找到 blob 的“极端点”,而不是确定它是否是四字形。