QQ登录

只需一步,快速开始

上位机通过CCD视觉识别条形码与二维码

[ 复制链接 ]

上位机通过CCD视觉识别条形码与二维码

上位机通过CCD视觉识别条形码与二维码

上位机通过CCD视觉识别条形码与二维码

上位机通过CCD视觉识别条形码与二维码

上位机通过CCD视觉识别条形码与二维码

上位机通过CCD视觉识别条形码与二维码

上位机通过CCD视觉识别条形码与二维码

上位机通过CCD视觉识别条形码与二维码



1.条形码又称条码、一维码,是将字符按照特定的规则转化成二进制后,描绘成一个宽度不等的多个黑条和空白,按照一定的编码规则排列的图形标识符。条形码应用相当广泛,生活中,超市购物最为常见。

条形码的编码规则五花八门,有数十种,各种都有它特有的空间里发挥作用,类型多达255以上。

程序可支持的条形码种类可扩展:GS1 DataBar Omnidirectional, GS1 DataBar Truncated, GS1 DataBar Stacked, GS1 DataBar Stacked Omnidirectional, GS1 DataBar Limited, GS1 DataBar Expanded, GS1 DataBar Expanded Stacked, GS1-128, Code 128, EAN-13 Add-On 5, EAN-13 Add-On 2, EAN-13, UPC-A Add-On 5, UPC-A Add-On 2, UPC-A, EAN-8 Add-On 5, EAN-8 Add-On 2, EAN-8, UPC-E Add-On 5, UPC-E Add-On 2, UPC-E, Code 93, Code 39, Codabar, 2/5 Interleaved, 2/5 Industrial


2.程序可支持的三维码种类可扩展: 'Aztec Code', 'Data Matrix ECC 200', 'GS1 Aztec Code', 'GS1 DataMatrix', 'GS1 QR Code', 'Micro QR Code', 'PDF417', 'QR Code'

QRcode码是最常用的二维码之一,它是将文本通过一定的规则转化为二进制后,编码生成的一个正方形的图形,由于在设计时就加入了很多自我纠错的功能和重复序列,让二维码生成有很强的纠错能力,就算是缺少了部分图像,仍然能解码出完整的文字信息。


下面是例程中核心代码

  1. BOOL CCode::Read2DCode(HWND hWnd,CString &sCode,CString sPicName)
  2. {
  3.         if(!IsWindow(hWnd))
  4.                 return false;
  5.         HObject  ho_Image, ho_SymbolXLDs;
  6.         HTuple   hv_WindowHandle, hv_DataCodeHandle, hv_ResultHandles;
  7.         HTuple   hv_DecodedDataStrings, hv_Message,hv_PicName=sPicName;       
  8.         ReadImage(&ho_Image,hv_PicName);
  9.         if (HDevWindowStack::IsOpen())
  10.                 CloseWindow(HDevWindowStack::Pop());
  11.         OpenWindowFitImage(ho_Image, 0, 0, -1, -1, &hv_WindowHandle,hWnd);
  12.         if(!HDevWindowStack::IsOpen())
  13.                 return false;
  14.         CreateDataCode2dModel("QR Code", HTuple(), HTuple(), &hv_DataCodeHandle);
  15.         FindDataCode2d(ho_Image, &ho_SymbolXLDs, hv_DataCodeHandle, HTuple(), HTuple(), &hv_ResultHandles, &hv_DecodedDataStrings);
  16.         SetLineWidth(HDevWindowStack::GetActive(),3);
  17.         SetColor(HDevWindowStack::GetActive(),"green");
  18.         DispObj(ho_Image, HDevWindowStack::GetActive());
  19.         DispObj(ho_SymbolXLDs, HDevWindowStack::GetActive());
  20.         DisplayMsg(hv_WindowHandle, hv_DecodedDataStrings, "window", 40, 12, "black", "true");
  21.         hv_Message = "No data code found.";
  22.         hv_Message[1] = "The symbol could not be found with the standard";
  23.         hv_Message[2] = "default setting. Please adjust the model parameters to read this symbol.";
  24.         if(hv_DecodedDataStrings.TupleLength()==0)
  25.         {
  26.                 DisplayMsg(hv_WindowHandle, hv_Message, "window", 40, 12, "red", "true");
  27.                 return false;
  28.         }
  29.         ClearDataCode2dModel(hv_DataCodeHandle);
  30.         sCode = hv_DecodedDataStrings.S();
  31.         return true;
  32. }
复制代码
  1. BOOL CCode::ReadBarCode(HWND hWnd,CString &sCode,CString sPicName)
  2. {
  3.         if(!IsWindow(hWnd))
  4.                 return false;
  5.         HObject  ho_Image, ho_SymbolRegions;
  6.         HTuple  hv_BarCodeHandle, hv_WindowHandle, hv_DecodedDataStrings,hv_Width, hv_Height,hv_PicName=sPicName;
  7.         CreateBarCodeModel(HTuple(), HTuple(), &hv_BarCodeHandle);
  8.         SetBarCodeParam(hv_BarCodeHandle, "stop_after_result_num", 1);

  9.         SetWindowAttr("background_color","black");
  10.         ReadImage(&ho_Image, hv_PicName);
  11.         GetImageSize(ho_Image, &hv_Width, &hv_Height);
  12.         if (HDevWindowStack::IsOpen())
  13.                 CloseWindow(HDevWindowStack::Pop());
  14.         OpenWindowFitImage(ho_Image, 0, 0, -1, -1, &hv_WindowHandle,hWnd);
  15.         HDevWindowStack::Push(hv_WindowHandle);
  16.         if (!HDevWindowStack::IsOpen())
  17.                 return false;
  18.         SetBarCodeParam(hv_BarCodeHandle, "check_char", "absent");
  19.         FindBarCode(ho_Image, &ho_SymbolRegions, hv_BarCodeHandle, "2/5 Industrial", &hv_DecodedDataStrings);
  20.         SetBarCodeParam(hv_BarCodeHandle, "check_char", "present");
  21.         FindBarCode(ho_Image, &ho_SymbolRegions, hv_BarCodeHandle, "2/5 Industrial", &hv_DecodedDataStrings);
  22.         DisplayMsg(hv_WindowHandle, hv_DecodedDataStrings, "window", 36, 12, "black", "false");
  23.         SetColor(HDevWindowStack::GetActive(),"magenta");
  24.         SetDraw(HDevWindowStack::GetActive(),"margin");
  25.         SetLineWidth(HDevWindowStack::GetActive(),3);
  26.         DispObj(ho_Image, hv_WindowHandle);
  27.         DispObj(ho_SymbolRegions, hv_WindowHandle);
  28.         ClearBarCodeModel(hv_BarCodeHandle);
  29.         sCode = hv_DecodedDataStrings.S();
  30.         return true;
  31. }
复制代码
  1. void CBarCodeView::OnButton1()
  2. {
  3.         static int Index=0;
  4.         Index++;
  5.         if(Index>4)
  6.                 Index=1;
  7.         CString sCode,sPicName;
  8.         sPicName.Format("pic/25industrial0%d.png",Index);//::MessageBox(NULL,sPicName,"",NULL);
  9.         m_Code.ReadBarCode(GetDlgItem(IDC_BARCODE)->m_hWnd,sCode,sPicName);
  10.         SetDlgItemText(IDC_EDIT1,sCode);
  11.                
  12.         CRect rc;       
  13.         GetClientRect(rc);
  14.         InvalidateRect(&rc);
  15. }
  16. void CBarCodeView::OnButton3()
  17. {
  18.         static int Index=0;
  19.         Index++;
  20.         if(Index>10)
  21.                 Index=1;
  22.         CString sCode,sPicName;
  23.         sPicName.Format("pic/qr_workpiece_%0.2d.png",Index);
  24.         m_Code.Read2DCode(GetDlgItem(IDC_BARCODE)->m_hWnd,sCode,sPicName);
  25.         SetDlgItemText(IDC_EDIT1,sCode);
  26. }
复制代码

百度云附件:上位机通过CCD视觉识别条形码与二维码.rar   

  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索