博舍

【机器视觉】二维码检测(QR 码) 智能机器人a18二维码

【机器视觉】二维码检测(QR 码)

这里写自定义目录标题二维码检测(QR码)代码二维码检测(QR码)

读取QR码,可以自动定位QR码,并允许QR图像旋转任意角度。

分割设置阈值:设置二值图像的分割阈值,当像素灰度值大于等于该值为白色,否则为黑色。

自动计算阈值:软件将根据直方图分布自动计算出分割阈值。

二值图像预览:为了方便调整阈值,以二值化效果显示当前图像。参数设置

搜索二维码数量:最多被允许搜索到的二维码数量。

检测二维码颜色:选择要读取的二维码是黑色、白色。

定位核最小面积:定位标记最小面积。

定位核最大面积:定位标记最大面积。

代码

在StdAfx.h的头文件中添加CKVISION相关定义#include"……IncludeCKBase.h"#include"……IncludeCKGDI.h"#include"……IncludeCKReadQRCode.h"

#ifdef_WIN64#pragmacomment(lib,“……Lib_x64CKBase.lib”)#pragmacomment(lib,“……Lib_x64CKGDI.lib”)#pragmacomment(lib,“……Lib_x64CKReader.lib”)#else#pragmacomment(lib,“……LibCKBase.lib”)#pragmacomment(lib,“……LibCKGDI.lib”)#pragmacomment(lib,“……LibCKReader.lib”)#endif

usingnamespaceCKVision;

在应用程序入口和退出的地方增加初始化和释放CKVISION库。

CKVision::InitLibrary();//初始化CKVision库

//…

//…End

CKVision::ExitLibrary();//退出CKVision库

在资源视图Dialog中添加相应的界面操作

//……详情请打开实例参考。

在对话框窗口的.h头文件中定义相应的图像处理功能:CPrImagem_Image;//基础图像CGdiRectm_Rect;//搜索ROICOverlaym_Overlay;//图像显示表面,前显示的动态图形,主要用于ROI显示。COverlaym_Results;//图像显示表面,前显示的静态图形,主要用于检测结果生成图形显示。CGdiViewm_GdiView;//图形显示视图窗口CReadQRCodem_QRCode;//二维码QRCode读取

在对话框窗口的.cpp实现文件中添加相应的功能实现。//执行voidCQRCodeDemoDlg::OnBnClickedExecute(){//TODO:在此添加控件通知处理程序代码//删除所有图形,请注意在线程中调用清除图形时,最好使用发送消息的方式,//可参考ContourDemo中的CContourDemoDlg::OnExecute()。

Overlay_DeleteAll(m_Results);

BOOLisCheck1=m_Check1.GetCheck();if(isCheck1){AutoThreshold();}

intnMaxCount=GetDlgItemInt(IDC_EDIT1);intnPos=m_Slider1.GetPos();//设置读取参数m_QRCode.SetMaxCount(nMaxCount);m_QRCode.SetThreshold(nPos);m_QRCode.SetPolarity(m_Combo1.GetCurSel());m_QRCode.SetMinArea(GetDlgItemInt(IDC_EDIT2));m_QRCode.SetMaxArea(GetDlgItemInt(IDC_EDIT3));

BeginTime();

if(m_Rect.GetVisible()){

m_QRCode.Execute(m_Image,m_Rect);////执行读取二维码功能}else{m_QRCode.Execute(m_Image,MaxROI);}

EndTime();

m_List1.DeleteAllItems();

for(inti=0;iintnItem=m_List1.InsertItem(i,_T(“”));CStringstr;str.Format(_T(“%d”),i);m_List1.SetItemText(nItem,0,str);

DPNTctPos;Center2P(pResult->border[0],pResult->border[2],ctPos);doubledAngle=0;dAngle=Angle2P(pResult->border[0],pResult->border[1]);

str.Format(_T(“%0.3f”),ctPos.x);m_List1.SetItemText(nItem,1,str);str.Format(_T(“%0.3f”),ctPos.y);m_List1.SetItemText(nItem,2,str);

str.Format(_T(“%0.3f”),dAngle);m_List1.SetItemText(nItem,3,str);

m_List1.SetItemText(nItem,4,CString(pResult->codeText));

//多边形图形CGdiPolygon*p1=newCGdiPolygon;if(p1!=NULL){p1->SetMax(4);p1->Add(pResult->border[0]);p1->Add(pResult->border[1]);p1->Add(pResult->border[2]);p1->Add(pResult->border[3]);if(pResult->codeLen>0){p1->SetPenColor(RGB(0,255,0));}else{p1->SetPenColor(RGB(255,0,0));}p1->SetPenWidth(2);m_Results.AddItem(p1);//添加到显示}CGdiPoint*p2=newCGdiPoint(ctPos);if(p2!=NULL){p2->SetSize(21);p2->SetStyle(0);p2->SetPenWidth(1);p2->SetPenColor(RGB(0,255,0));m_Results.AddItem(p2);//添加到显示}

for(intn=0;npText->SetPosition(pResult->border[n].x,pResult->border[n].y);pText->SetPenColor(RGB(0,0,255));m_Results.AddItem(pText);//添加到显示

}}}}

m_GdiView.Redraw();//刷新显示}

//……详情请打开实例参考。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇