【问题标题】:Image Comparison of logos标志的图像比较
【发布时间】:2012-04-05 22:48:23
【问题描述】:

我正在做一个 android 项目,我必须检测一个标志(标志可以是不同的对比度、色调或饱和度),因为我正在使用 OpenCV-2.3.1 for android 的直方图比较。

我所遵循的步骤如下;

1)计算存储图像的历史值

private List<Integer> histSize;
   private List<Float> ranges;


  histSize.add(50);
    histSize.add(60);
    histSize.add(10);

    ranges.add(0f);
    ranges.add(256f);

    ranges.add(0f);
    ranges.add(180f);

    ranges.add(0f);
    ranges.add(256f);

    channels.add(0);
    channels.add(1);
    channels.add(2);


hsv_base1=new Mat();
Imgproc.cvtColor(image1,hsv_base1, Imgproc.COLOR_BGR2HSV);
hsv_base.add(hsv_base1);
Imgproc.calcHist(hsv_base, channels,new Mat(), hist_base, histSize, ranges,false);

2) 然后我每帧裁剪捕获的图像。裁剪后的图像大小与存储图像的大小完全相同,并使用与上述相同的方法计算其直方图值。

3) 比较两个图像的存储历史值

double base_test2 = Imgproc.compareHist(hist_base1,hist_baseCamera1,Imgproc.CV_COMP_CHISQR);

我得到了 comparehist 的良好价值。 然而问题是有时它为一些随机捕获的图像提供了良好的值,即不需要的。

所以现在我打算使用其他一些方法进行直方图比较。我的标志由一个圆圈组成。

我的问题是:: 有什么方法可以让我找到捕获的图像由与存储徽标的圆圈大小完全相同的圆圈组成。

或者我应该使用的任何其他方法,或者我可以使用通道、范围、histSize 的存储值?

我之前使用过模板匹配,对于相同大小的图像,它非常缓慢且非常困难

我将不胜感激。

【问题讨论】:

    标签: opencv shape


    【解决方案1】:

    当然还有其他方法。事实上,正如您已经发现的那样,比较直方图是一种非常模糊的方法选择。 (多张图片可以有如下图相同的直方图)

    我看到您目前正在制作带有颜色的徽标,但更简单的方法通常会带来更好的结果。因此,您应该考虑是否可以改为使用灰度图像(这并不意味着您的徽标不能有颜色,它只是意味着您必须在处理之前对图像进行分割)。由于图像中的数据量较少,更简单的方法通常还可以带来更快的运行时间。

    如果您已经进行了分割,您将能够对图像进行阈值化并进行 BLOB 分析(Binary Large OBject),您需要的算法取决于您感兴趣的图形,这些方法和描述可以在OpenCV documentation

    我的猜测是matchShapes() 函数可以很好地为您服务。但是,您需要对图像处理有所了解,而不仅仅是使用直方图。

    您当然必须为 Android 版本的 OpenCV 找到包装器。

    附:记得在标签中包含环境、编程语言和平台是可能的。

    【讨论】:

    • 分段似乎是一个更好的选择。虽然我从未在 openCv 中实现分段,但我会试试这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    相关资源
    最近更新 更多