c++ - Opencv:二维条码(Data Matrix)检测

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

我正在研究检测 PCB 板上的二维条码。环境为Visual Studio 2012。

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

加载图形:原始图像大小为1600*1200。

加载图形后,开始一系列的处理,步骤如下:

<强>1。通过自动阈值法寻找阈值。

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

<强>3。做Opening使图像清晰。

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

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

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

5.1 计算直方图

void calcHist( const Mat* images, int nimages, const int* channel ,InputArray 掩码, OutputArray hist,int dims,const int* histSize, const float** ranges, 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)来估计两个正方形的相似度,但它并没有解决这个问题。

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

最佳答案

为什么不使用库?

datamatrix opencv module

zxing Cpp

libdmtx

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

关于c++ - Opencv:二维条码(Data Matrix)检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29365813/

相关文章:

c++ - 如何找到我的线程在哪个 CPU 内核上运行

c++ - 如何处理初始化类的大量属性?

c++ - 消除运行时错误 (SIGSEGV)

python-3.x - 使用图像的每个像素的每个位制作 8 个图像

visual-studio-2010 - 使用 SURF 时出现运行时错误 Visual Studio 和 OpenCV 错误

c++ - 未定义对析构函数的引用

css - 带文本/按钮的全屏图像(响应式)

java - 为什么我的 JLabel 图标没有出现?

java - Selenium FireFoxDriver 配置文件在加载 Firefox 后发生变化吗?

c++ - 将图像指针传递给另一个程序