【问题标题】:OpenCV - Identifying particular object in image using JavaOpenCV - 使用 Java 识别图像中的特定对象
【发布时间】:2017-01-18 17:00:52
【问题描述】:

我正在用java开发一个opencv应用程序,我需要检测产品上的不同标记。I have attached the input image below 在该图像中,我需要识别非蔬菜标记。

由于我是新手,我需要帮助来了解可以使用哪些概念。 我需要在输入图像上识别these marks

【问题讨论】:

  • 您可以尝试模板匹配来解决这个问题。将“非蔬菜”图像徽标调整为可变大小,并在源图像(食物图像)上运行移动窗口。检查调整大小的徽标在源图像上的确切位置。
  • “veg & non-veg logo”有时会有轻微的颜色变化。
  • 好的,首先检查模板(徽标)是否与特定尺寸的图像匹配。如果是,那么您已经决定它是“绿色”还是“红色”。您可以使用 HSV 颜色空间为红色和绿色指定一个范围!
  • 我无法成功实现它。你可以为它写一个小代码吗?

标签: java opencv image-processing feature-extraction orb


【解决方案1】:

经过一番努力,我终于想出了一个粗略的解决方案。

首先,我将vegnon-veg标签分开。

&

现在,为了使 non-veg 标签完美贴合图像,我将其调整到特定级别:

small = cv2.resize(nveg, (0,0), fx=0.12, fy=0.12) 

现在我执行了 模板匹配,正如我在 cmets 部分所述。要了解有关此主题的更多信息VISIT THIS PAGE

使用它,我获得了图像中非蔬菜标签的“最大可能位置”。

res = cv2.matchTemplate(food, small, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

在下图中,注意非蔬菜标记位置的亮点:

现在使用 max_loc 变量,我将元组值添加到调整大小的非蔬菜标签的大小,并用矩形框起来,如下所示:

当我使用max_loc 标记时,您可以看到非蔬菜标记上的黑点:

希望这会有所帮助。 :)

【讨论】:

  • 在这个答案中,我通过反复试验明确调整了非蔬菜标记的大小。一个更好的解决方案是自动化resize 函数以获得最佳拟合。通过这种方式,它可以运行多个图像。 :)
  • 正如我在之前的评论中提到的,您必须调整非蔬菜模板的大小,以获得不同图像的最佳匹配。
  • 实际上找不到错误的匹配,因为不会有任何关联
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 2014-06-28
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 2020-03-17
相关资源
最近更新 更多