【问题标题】:Opencv: 2D barcode (Data Matrix) detectionOpencv:二维条码(Data Matrix)检测
【发布时间】:2015-06-04 15:00:54
【问题描述】:

我正在努力检测 PCB 板上的二维条码。环境是 Visual Studio 2012。

我们遇到了一些问题,无法成功过滤出二维条码图像。

加载图:原图尺寸为1600*1200。

我们加载图形后,盯着一系列的处理如下:

1.通过自动阈值方法找到阈值。

2。对图像进行二进制阈值处理。

3.正在打开以使图像清晰。

开幕式: dst = open(src,element) = dilate(erode(src, element))

4.过滤掉除正方形以外的矩形。 然后我们可以得到一个正方形的集合。 如下图,经过1-4步我们可以在图片上找到方块。

5.使用类似的Data Matrix Template分别通过直方图分析与正方形进行比较。

5.1 计算直方图

void calcHist( const Mat* images, int nimages, const int* 通道,InputArray 掩码, OutputArray hist, int dims, const int* histSize, const float** 范围,bool uniform=true, bool accumulate=false);

5.2 对数组的取值范围进行归一化

void normalize( InputArray src, OutputArray dst, 双 alpha=1, 双 beta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray());

5.3 比较两个直方图的相关性。

double compareHist(InputArray H1, InputArray H2, CV_COMP_CORREL);

6.处理后我们无法从正方形集合中过滤出正确的图像。

6.1 我们将直方图的 bins 从 256 调整为 64/32,但结果没有鲁棒性,相关值非常低,甚至小于 0.5。

6.2 我们也尝试使用 EMD(Earth Mover's Distance)来估计两个正方形的相似度,但并没有解决这个问题。

[[问题]]: 可以分享一些建议来改进我们的检测方法吗?

【问题讨论】:

    标签: c++ image opencv visual-studio-2012 datamatrix


    【解决方案1】:

    为什么不使用库?

    datamatrix opencv module

    zxing Cpp

    libdmtx

    否则,你可以研究这些库中的代码,并尝试优化自己的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2017-09-09
      • 1970-01-01
      相关资源
      最近更新 更多