Opencv:二维条码(数据矩阵)检测

时间:2015-03-31 10:00:18

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

我正在研究在PCB板上检测2D条形码。环境是Visual Studio 2012。

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

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

在我们加载图形并按照以下步骤开始一系列处理之后:

1。通过自动阈值方法查找阈值。

2。对图像执行二进制阈值。

第3。做开放以清晰地制作图像。

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

4。过滤掉除正方形之外的矩形。 然后我们可以得到一组正方形。 如下图所示,在步骤1-4之后,我们可以在图像上找到正方形。

5。使用类似的数据矩阵模板分别通过直方图分析与正方形进行比较。

5.1计算直方图

void calcHist(const Mat * images,int nimages, const int * channels,InputArray mask, OutputArray hist,int dims,const int * histSize, const float ** range,bool uniform = true,bool accumulate = false);

5.2规范化数组的值范围

void normalize(InputArray src,OutputArray dst,double alpha = 1,double 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我们已经将直方图的区间从256调整到64/32,但结果没有鲁棒性,相关值非常低,甚至小于0.5。

6.2我们还尝试使用EMD(地球移动器的距离)来估计两个方格的相似性,但它并没有解决这个问题。

[[问题]]: 是否有可能与我们分享一些改进检测方法的建议?

1 个答案:

答案 0 :(得分:1)

为什么不使用库?

datamatrix opencv module

zxing Cpp

libdmtx

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