我对Android和Java编程非常陌生,但我想开始开发一些应用程序。我已经安装了Eclipse,Android SDK和Open CV,我可以编译样本,但是我无法理解它们是如何工作的,因为它与C / C ++非常不同,我知道这些。我试图在互联网上找到一些东西,但我找不到很多初学者的教程。 我现在要做的是一个识别形状和颜色的应用程序。例如,如果我选择黄色圆圈,应用程序将突出显示黄色圆圈。首先,我将在纸上打印此image并尝试使用我的智能手机识别。
PS:对不起我的英文。
答案 0 :(得分:0)
There is a great article仅针对您的问题,但它位于AForge.NET框架上。尽管如此,这里的信息可能会引导您走上正确的道路或方法。
如果我使用OpenCV,我会采取以下步骤来解决此问题:
InRange
的函数(也许你可以在问题和答案中找到一些帮助{ {3}}。不同颜色的提取形状应该存储在不同的Mat对象中,黄色的fe形状存储在一个Mat中,蓝色存储在另一个Mat中等等。通过这种提取分离不同的颜色形状将更容易进行以下处理。 / LI>
Canny
或findContours
函数完成,但第二个函数会优先,因为在{{1}之后你的图像将是二进制(掩码)。然后,每个形状都应存储在单独的Mat对象中,使用InRange
函数绘制它们。它应该是一个多维数组左右,因为首先你的形状应该按颜色排序。drawContours
函数简单地完成。这个函数可能会误解圆形五边形,但使用适当的参数它应该可以完美地工作。更多信息HERE。现在您知道哪些形状是圆形及其颜色。houghCircles
函数简化您的轮廓。然后,为了精确起见,您可以使用approxPolyDP
。在那之后,如果需要的话,用下面的线检查每条线的角度,这样你就可以找到一起形成一条线,比如说,~182-178度(几乎是一条直线)。这些行应合并为一行,因为这是轮廓简化的错误。检查形状(或简化轮廓)有多少行,这是形状的类型。 SECOND 方法会在轮廓上找到convexHull
。然后,检查每条线与另一条线的碰撞,找出它们中有多少在这里并形成具有该数据的形状。更多信息HERE。正如您从我的文字中所理解的那样,这项任务并非易事。使用任何方法都不容易,但这肯定是可能的,这是一个非常常见的任务,可以找到很多关于此的信息。