我们在《VPLC系列机器视觉运动控制一体机快速入门(三)》的推文中,讲述了基于形状匹配的视觉定位功能,而BLOB斑点分析也可以实现定位功能。

  本期课程我们将在BLOB斑点分析定位的基础上进行检测圆形,输出圆心的坐标数据。

  《视频教程:机器视觉运动控制一体机应用例程(三) 基于BLOB分析的多圆定位》

  一 检测原理

  

  (一)BLOB斑点定位

  BLOB斑点分析功能可以输出BLOB区域的重心位置XY,BLOB斑点区域还可以拟合成特定形状如外接矩形,输出矩形的角度,从而实现定位的功能。

  (二)BLOB分析的圆形检测+示意图

  圆形测量器不具有定位功能,因此当检测目标在视野的位置是随机时,我们需要配合定位功能将测量器跟随目标移动。本节程序示例将检测到的BLOB重心XY数据作为圆形测量器的中心XY值,即可实现位置跟随功能。

  

  

  

  二 软件演示

  

  (一)检测要求

  使用ZDevelop软件的ZBASIC编程语言编写程序,用于检测以下路径中图片的圆环零件的圆心位置XY以及半径。

  使用到的视觉功能:BLOB斑点分析+检测圆形+九点标定。

  

  

  

  (二)实例演示

  1.打开ZDevelop软件:新建项目→新建HMI文件→新建main.bas文件,用于编写界面响应函数→新建global_variable.bas文件用于定义全局变量并开启HMI自动运行任务→新建detectParam.bas文件,用于初始化测量参数→新建camera.bas文件用于实现相机采集功能→文件添加到项目。

  

  

  

  2.设计HMI界面。

  

  

  

  3.在global_variable.bas文件中添加全局变量。

  '''''全局变量大部分使用数组结构'''''

  ''注:basic编程中很多函数会以TABLE(系统的数据结构)做为参数

  ''table 说明 table 说明

  ''0 ' 自动二值化阈值 11~12 鼠标操作时获取的坐标

  ''2 亮区域的面积 20~24 图像信息

  ''4 暗区域的面积 6 连通区域的数量

  ''40~42 小圆斑点的面积和位置X,Y数据 81~98 标定图像坐标xy

  ''46~48 小圆圆心X,Y和半径 131~148 标定世界坐标xy

  ''39 提取mark点成功标志 56~57 圆点矩阵行列数

  ''49~50 圆上的点坐标

  '主任务状态

  '0 - 未初始化

  '1 - 停止

  '2 - 运行中

  '3 - 正在停止

  GLOBAL DIM main_task_state

  main_task_state = 1

  '采集开关

  '0 - 停止采集

  '1 - 请求采集

  GLOBAL DIM grab_switch

  grab_switch = 0

  '相机个数

  GLOBAL cam_num

  cam_num = 0

  '相机种类,"zmotion;mvision;basler;mindvision;huaray"

  GLOBAL DIM CAMERA_TYPE(16)

  CAMERA_TYPE = "mvision"

  ' 定义主任务id - 10

  GLOBAL DIM main_task_id

  main_task_id = 10

  '定义连续采集任务id - 9

  GLOBAL DIM grab_task_id

  grab_task_id = 9

  '定义全局图像变量

  GLOBAL ZVOBJECT grabImg '采集图像

  GLOBAL ZVOBJECT binImg '二值化图像

  GLOBAL ZVOBJECT disImg '显示图像

  '定义常用颜色变量

  GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOW

  C_RED = RGB(255, 0, 0)

  C_GREEN = RGB( 0,255, 0)

  C_BLUE = RGB( 0, 0,255)

  C_YELLOW= RGB(255,255, 0)

  '检测参数:阈值模式(自动阈值或手动阈值)、低阈值、高阈值、最小面积、最大面积

  GLOBAL DIM d_detect_param(5) 'd开头表示数据结构

  '开/闭运算参数

  GLOBal DIM d_deal_value(2)

  '检测消耗时间

  GLOBal DIM d_detect_time

  '小圆的位置x/y结果

  GLOBal DIM d_circle_rst(18)

  '显示打印的字符

  GLOBAL ShowString(64)

  '***********定义坐标标定相关变量*********************

  '是否标定

  GLOBAL DIM is_ca_success

  '定义标定成功标志,0-标定未成功,1-标定成功

  GLOBAL DIM d_calib_success

  d_calib_success = 0

  '定义标定系数即矩阵转换系数

  GLOBAL ZVOBJECT ca_param

  '定义标定参数数组,依次为:标定类型、对比度、极性、最小面积、最大面积、世界坐标点间距

  GLOBAL DIM d_ca_param(6) 'd开头表示数据结构

  '定义是否使用标定功能

  GLOBAL DIM d_use_calib

  d_use_calib=0

  '定义标定误差,依次为最小误差、最大误差、平均误差

  GLOBAL DIM ca_min_err,ca_max_err,ca_avg_err

  ca_min_err = 0

  ca_max_err = 0

  ca_avg_err = 0

  '***********定义读取本地文件功能相关变量**************

  ''注意,该功能只在使用仿真器时有效

  '定义是否使用本地图片标志

  GLOBAL DIM d_use_imgfile

  '定义本地图片索引

  GLOBAL DIM d_index

  '定义读取图片的路径

  GLOBAL DIM File_Name(100)

  '***********结束定义读取本地文件功能相关变量**********

  '运行HMI文件

  RUN "Hmi.hmi",1

  4.关联HMI界面控件变量。

  

  

  

  5.在detectParam.bas文件中初始化测量参数。

  end

  GLOBAL SUB init_detect_param() '初始化测量参数

  d_deal_value(0)=1 '初始化开/闭运算参数

  d_deal_value(1)=1

  '初始化检测参数:阈值模式(自动阈值 = 1 或 手动阈值 = 0)、低阈值、高阈值、极性(黑或白)、最大、最小、反向(即结果取反,成功变成失败、失败变成成功)

  d_detect_param(0) = 0 '手动阈值

  d_detect_param(1) = 140 '低阈值

  d_detect_param(2) = 255 '高阈值

  d_detect_param(3) = 11000 '最小面积即像素个数

  d_detect_param(4) = 12000 '最大面积

  d_use_imgfile = 1 '默认使用本地图片

  d_index = 0

  TABLE(6)=0 '将小圆数量初始化为0

  for i=0 to 17

  d_circle_rst(i)=0

  next

  '初始化坐标标定相关的变量

  d_ca_param(0) = 0 '标定类型

  d_ca_param(1) = 120 '对比度

  d_ca_param(2) = 0 '极性

  d_ca_param(3) = 80 '最小面积

  d_ca_param(4) = 20000 '最大面积

  d_ca_param(5) = 9 '世界坐标点间距

  ca_min_err = 0 '最小误差

  ca_max_err = 0 '最大误差

  ca_avg_err = 0 '平均误差

  for i=0 to 17 '初始化圆点矩阵像素坐标

  TABLE(81+i)=0

  next

  for i=0 to 17 '初始化圆点矩阵世界坐标

  TABLE(131+i)=0

  next

  TABLE(39)=0 '提取mark点状态默认为失败

  END SUB

  6.在main.bas文件中添加界面初始化函数,并在hmi系统设置中关联初始化函数名。

  end

  '注:

  '凡是要使用Region有关的算子在系统初始化时都要调用ZV_RESETCLIPSIZE(width, height)这个算子设置下图像尺寸,以满足相机分辨率,因为默认的是640*480尺寸

  'HMI界面初始化函数

  GLOBAL SUB hmi_init()

  grab_switch = 0 '停止采集

  main_task_state = 1 '主任务停止运行

  ZV_RESETCLIPSIZE(1280, 960) '依据图像分辨率设置区域的裁剪尺寸,此处图像分辨率为1280x960

  ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(10, 7), HMI_CONTROLSIZEY(10, 7)) '设置锁存的大小

  init_detect_param() '初始化测量参数

  ZV_SETSYSDBL("CamGetTimeout", 1000) '设置采集超时

  ZV_SETSYSINT("LineWidth",6)

  ZV_LATCHCLEAR(0) '清空锁存通道0

  END SUB

  

  

  

  7.在camera.bas文件中添加HMI运行界面中采集相关按钮响应的函数并关联动作函数。

  

  

  

  end

  '主界面按下扫描相机按钮时响应的函数

  GLOBAL SUB cam_scan_all()

  if(d_use_imgfile=1)then

  ?"请先按下使用本地图片按钮关闭该功能"

  return

  endif

  ZV_SETSYSINT("LogLevel", 7) '设置控制器信息

  ZV_SETSYSSTR("DataDir","")

  CAM_SCAN(CAMERA_TYPE) '扫描相机,CAMERA_TYPE="mvision"

  cam_num = CAM_COUNT() '获取扫描到的相机数量

  if (0 = cam_num) then '如果相机数量=0,打印提示信息

  ? "未找到相机"

  return '退出子函数,不往下执行

  endif

  ?"cam_num = " cam_num '如果扫描到相机,打印相机数量

  CAM_SEL(0) '选择扫描到的第一个相机进行操作

  CAM_SETEXPOSURE(5000) '设置相机曝光时间为5000us

  CAM_SETMODE(0) '设置软件触发模式

  CAM_START(0) '开启相机

  END SUB

  '主界面按下单次采集按钮执行的函数

  GLOBAL SUB btn_grab()

  ''如果d_use_imgfile=1时使用读取本地图片功能,该功能只在使用仿真器时有效,使用控制器时请将此部分代码注释掉

  if (d_use_imgfile=1) then

  if(d_index=3) then

  d_index=0

  endif

  File_Name="\圆定位\"+TOSTR(d_index,1,0)+".bmp" '.../flash/圆定位/目录下的图片所在的路径名称

  ZV_IMGREAD(grabImg,File_Name,0)

  ZV_LATCH(grabImg, 0)

  d_index=d_index+1

  return

  endif

  ''读取本地图片功能结束

  if cam_num = 0 then

  ?"请先扫描相机!"

  return

  endif

  CAM_SETPARAM("TriggerSoftware", 0) '发送触发指令

  CAM_GET(grabImg, 0) '获取一帧图像存放到grabImg变量中

  ZV_LATCH(grabImg, 0) '将图像显示到锁存通道0中

  END SUB

  '主界面按下连续采集按钮响应的函数

  GLOBAL SUB btn_cgrab()

  if grab_switch =1 then '如果已经处于连续执行状态,打印提示信息并退出函数

      ?"正在连续运行中,请勿重复操作!"

      return

  endif

  if( d_use_imgfile =0) then

  if cam_num = 0 then '如果相机数量=0,打印提示信息并退出函数

  ?"请先扫描相机!"

  return

  endif

  endif

  grab_switch = 1 '采集任务开关置1

  if (1 = grab_switch) then

  if (0 = PROC_STATUS(grab_task_id)) then

      RUNTASK grab_task_id, grab_task '开启连续采集任务

  endif

  endif

  END SUB

  '采集任务实现函数

  grab_task:

  while(1)

  if (0 = grab_switch) then '如果采集任务开关=0即停止采集按钮按下时

  exit while '退出循环

  endif

      '重复执行以下操作

  btn_grab()

  wend

  END

  '主界面按下停止采集按钮响应的函数

  GLOBAL SUB btn_stopCgrab()

  if grab_switch =0 then '如果已经处于停止采集状态,打印提示信息并退出函数

  ?"未开启连续采集!"

return

  endif

  grab_switch = 0 '将采集任务开关置0

  END SUB

  8.点击“元件”→“新建窗口”,新建标定界面窗口,并将《VPLC系列机器视觉运动控制一体机快速入门(六)》中的标定程序的界面拷贝到新建的窗口界面。

  

  

  

  9.在main.bas文件中添加运行界面按下【标定】按钮时的响应函数,以及标定窗口界面按下【提取mark点】按钮、【标定】按钮以及【返回】按钮时响应的函数,可参考《VPLC系列机器视觉运动控制一体机快速入门(六)》中的标定程序。

  '点击运行界面按下标定按钮时响应的函数

  GLOBAL SUB btn_calib()

  '设置坐标标定窗口锁存通道0的锁存大小

  ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(11, 91), HMI_CONTROLSIZEY(11, 91))

  if (d_use_imgfile=1) then '如果使用本地图片功能

  ZV_IMGREAD(grabImg,"\圆定位\calib.bmp",0) '加载标定图片

  endif

  ZV_LATCHCLEAR(0) '将锁存通道0清空

  ZV_LATCH(grabImg, 0) '显示采集图像显示到锁存通道0中

  HMI_SHOWWINDOW(11) '弹出窗口号为11的坐标标定窗口界面

  END SUB

      '坐标标定界面按下提取mark点按钮时响应的函数

  GLOBAL SUB btn_ca_extract()

  for i=0 to 17 '初始化圆点矩阵像素坐标

  TABLE(81+i)=0

  next

  for i=0 to 17 '初始化圆点矩阵世界坐标

  TABLE(131+i)=0

  next

  TABLE(39)=0 '提取mark点状态默认为失败

  ZVOBJECT inppts, ppts, wpts

      '根据提取像素参数提取像素坐标,存放到inppts矩阵中

  ZV_CALGETSCAPTS(grabImg, inppts, d_ca_param(1), d_ca_param(2), d_ca_param(3), d_ca_param(4))

  '获取矩阵inppts中的数据信息,存放到table(56)中

  ZV_MATINFO (inppts, 56)

  DIM row,col

  row = TABLE(56) '矩阵行数赋值给row变量

  col = TABLE(57) '矩阵列数赋值给col变量

  if(row * col = 18) then '如果获取到9个圆点的圆心位置坐标x,y

  TABLE(39) = 1 '窗口界面提示提取mark点成功

  else

  TABLE(39) = 0 '窗口界面提示提取mark点失败

  return '返回子函数,不往下执行

  endif

  '根据mrak点间距和像素坐标计算世界坐标,存放到wpts矩阵

  ZV_CALGETPTSMAP(inppts,ppts,wpts,d_ca_param(5))

  '获取矩阵ppts中的数据信息,存放到table(56)中

  ZV_MATINFO (ppts, 56)

  row = TABLE(56) '矩阵行数赋值给row变量

  col = TABLE(57) '矩阵列数赋值给col变量

  if(row * col = 18) then'如果获取到9个圆点的圆心位置坐标x,y

  TABLE(39) = 1 '窗口界面提示提取mark点成功

  else

  TABLE(39) = 0 '窗口界面提示提取mark点失败

  return '返回子函数,不往下执行

  endif

  '像素坐标和世界坐标放入table中

  DIM i

  FOR i=0 TO row-1

  ZV_MATGETROW (ppts, i, col, 81 + i*col)'将像素坐标存放到table81~table98中

  ZV_MATGETROW (wpts, i, col, 131 + i*col)'将世界坐标存放到table131~table148中

  NEXT

  '将灰度图转成RGB图像,作为结果图像

  ZVOBJECT color

  ZV_GRAYTORGB(grabImg, color)

  '绘制mark点的十字架

  DIM j, pixNum

  pixNum = 0

  FOR i=0 TO 2

  FOR j=0 TO 2

  '绘制mark标记点

  ZV_MARKER(color, TABLE(81 + 2 * pixNum), TABLE(81 + 2 * pixNum + 1), 0, 40, C_GREEN)

  pixNum = pixNum + 1

  NEXT

  NEXT

  '用文本绘制mark点的序号,显示在图像界面中

  FOR i=0 TO 8

  ZV_TEXT (color, TOSTR(i,1,0), TABLE(81+2*i)-20, TABLE(81+2*i +1)-40, 80, C_RED)

  NEXT

  ZV_LATCH(color, 0)'显示结果图像

  END SUB

  '坐标标定界面按下标定按钮时响应的函数

  GLOBAL SUB btn_ca_calib()

  ZV_IMGINFO(grabImg,0) '获取采集图像信息

  '根据像素坐标数据组和世界坐标数据组执行标定,获得标定系数ca_param

  ZV_CALCAM(ppts,wpts,ca_param,TABLE(0),TABLE(1),d_ca_param(0))

  is_ca_success=1 '标定成功标志置1

  ZV_CALERROR(ca_param, ppts, wpts, 0)'计算标定误差,并将结果存放在起始地址为0的数组中

  ca_min_err = TABLE(1) '将误差结果赋值给变量,用于在界面中实时显示误差结果

  ca_max_err = TABLE(2)

  ca_avg_err = TABLE(0)

  END SUB

  '坐标标定界面按下返回按钮时响应的函数

  GLOBAL SUB btn_ca_param_rtn()

  ZV_LATCHCLEAR(0) '将锁存通道0清空

  ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(10, 7), HMI_CONTROLSIZEY(10, 7)) '设置锁存的大小

  btn_grab()

  HMI_CLOSEWINDOW(11) '关闭窗口号为13的坐标标定窗口界面

      END SUB

  10.在main.bas文件中添加HMI运行界面按下测试按钮响应的函数,并关联动作函数名。

  'HMI界面按下测试按钮时响应的函数

  GLOBAL SUB btn_test()

  TABLE(6)=0 '检测前先将结果数据清0

  d_detect_time=0

  for i=0 to 17

  d_circle_rst(i)=0

  next

  TICKS=0

  '定义变量,依次为白色像素连通区域,掩模区域,黑色像素连通区域,连通区域结果列表,小圆斑点区域,圆测量器,中间结果变量

  ZVOBJECT regionWhite, regionMask, regionBlack,re_connecte,circle_connect,mr,tmp

  '生成全图像区域

  ZV_REGENFULLIMG(grabImg,regionMask)

  '二值化处理

  if d_detect_param(0) = 0 then '如果选择手动阈值模式

  '根据低阈值和高阈值参数生成白色像素图像regionWhite

  ZV_RETHRESH(grabImg, regionMask, regionWhite, d_detect_param(1), d_detect_param(2))

  '对白色像素区域进行一次1*1的开运算

  ZV_REOPENING(regionWhite,regionWhite,d_deal_value(0),d_deal_value(0))

  '对白色像素区域进行一次1*1的闭运算

  ZV_RECLOSING(regionWhite,regionWhite,d_deal_value(1),d_deal_value(1))

  else '如果选择自动阈值模式

  Dim autoThresh '定义自动阈值模式下的二值化阈值

  '在grabImg图像中的指定区域内对图像进行自动二值化处理,输出二值化区域regionWhite

  ZV_REAUTOTHRESH(grabImg, regionMask, regionWhite, 0)

  '对白色像素区域进行一次1*1的开运算

  ZV_REOPENING(regionWhite,regionWhite,d_deal_value(0),d_deal_value(0))

  '对白色像素区域进行一次1*1的闭运算

  ZV_RECLOSING(regionWhite,regionWhite,d_deal_value(1),d_deal_value(1))

  autoThresh = TABLE(0)

  ? "autoThresh = " autoThresh '打印提示信息,当前二值化阈值

  endif

  '计算BLOB面积

  ZV_REAREA(regionWhite, 2) '计算regionWhite亮区域的面积,存放到table(2)中

  if(TABLE(2)>0) then '如果获取到的白色像素数量大于0

  ZV_RECONNECT(regionWhite,re_connecte) '计算区域的连通区域,存放到re_connecte列表中

  zv_refilter(re_connecte,0,d_detect_param(3),d_detect_param(4),0)'对区域列表中的区域进行过滤,保留面积在 d_detect_param(3) 到 d_detect_param(4) 的区域,面积不在此范围的区域将被过滤掉

  zv_refilter(re_connecte,20,0.8,1.3,0)'对区域列表中的区域进行过滤,保留最小外接矩形高宽比在0.9 到 1.1 的区域,面积不在此范围的区域将被过滤掉

  ZV_RESORT(re_connecte,1,1) '对区域列表中的区域按照重心X的数据进行升序排序

  ZV_LISTCOUNT(re_connecte,6) '获取列表中的连通区域的数量,存放到table(6)中

  endif

  '绘制效果图

  Dim width, height

  ZV_IMGINFO (grabImg, 20)'获取grabImg的图像信息

  width = TABLE(20)

  height = TABLE(21)

  ZV_GRAYTORGB(grabImg,disImg)'将灰度图转换到RGB图像,用于绘制检测结果图像

  ZV_REGION(disImg, regionMask, 0, ZV_COLOR(0,0,0)) '在disImg中绘制黑色的regionMask区域

  ZV_REGION(disImg, regionWhite, 0, ZV_COLOR(255,255,255))'在disImg中绘制白色的regionWhite区域

  for i=0 to TABLE(6)-1 '循环获取小圆斑点的位置XY信息生成圆测量器,检测圆心位置

  ZV_LISTGET(re_connecte,circle_connect,i) '获取列表中序号为i的元素,即依次获取列表中小圆斑点的连通区域

  ZV_REAREACENTER(circle_connect,40) '计算斑点区域的面积与中心位置,将位置放入TABLE(40)中

  ZV_MRGENCIRCLE(mr,TABLE(41),TABLE(42),70,50,0,360,1,10,8) '生成圆测量区域

  '设置测量参数,包括滤波尺寸、边缘阈值、边缘极性和边缘位置

  ZV_MRSETADV(mr,5, 50, 1,0)

  TABLE( 46, 0, 0, 0)'初始化结果数组

  '测量圆,并将结果赋值给起始地址为46的数组

  ZV_MRCIRCLE(mr, grabImg, tmp, 46)

  ZV_CIRCLE(disImg,TABLE(46),TABLE(47),TABLE(48),zv_color(0,255,0))'绘制小圆结果

  ShowString=TOSTR(i,1,0) '将BLOB的数量转换成字符串变量

  ZV_TEXT(disImg,ShowString,TABLE(46),TABLE(47),55,ZV_COLOR(0,0,255)) '显示结果文本

  ZV_MARKER(disImg,TABLE(46),TABLE(47),0,50,zv_color(0,255,0)) '在图像img中绘制十字

  if is_ca_success=1 AND d_use_calib=1 then

  ZV_CALTRANSW(ca_param, TABLE(46)+TABLE(48),TABLE(47),49) '圆心加半径的坐标

  ZV_CALTRANSW(ca_param, TABLE(46),TABLE(47),46) '使用标定系数将图像坐标转换成世界坐标

  d_circle_rst(i*3+0)=TABLE(46)'将测量圆的结果赋值给圆心变量,显示到界面中

  d_circle_rst(i*3+1)=TABLE(47)

  d_circle_rst(i*3+2)=ZV_DISTPP(TABLE(46),TABLE(47),TABLE(49),TABLE(50))

  else

  d_circle_rst(i*3+0)=TABLE(46)'将测量圆的结果赋值给圆心变量,显示到界面中

  d_circle_rst(i*3+1)=TABLE(47)

  d_circle_rst(i*3+2)=TABLE(48)

  endif

  next

  ZV_LATCH(disImg, 0) '在锁存通道0中显示结果图像

  d_detect_time=ABS(TICKS)'计算检测消耗时间

  END SUB

  

  

  

  11.在main.bas文件中添加HMI运行界面按下运行按钮响应的函数,并关联动作函数名。

  'HMI界面按下运行按钮时响应的函数

  GLOBAL SUB btn_run()

  if(2 = main_task_state) then '如果主任务处于运行状态,打印提示信息并退出函数

      ?"已经开启连续运行任务,请勿重复操作!"

  return

  endif

  if (1 = main_task_state) then '如果主任务处于停止状态

  if (0 = PROC_STATUS(main_task_id)) then '如果任务未开启

  main_task_state = 2 '主任务状态设置为2,表示正在执行连续任务

  RUNTASK main_task_id, main_task '开启主任务

  endif

  endif

  END SUB

  '主任务实现函数

  main_task:

  while(1)

  if (3 = main_task_state) then '如果主任务状态处于3即按下停止按钮时

      main_task_state = 1 '将主任务状态置为1

  exit while '退出循环

  endif

  '重复执行采集和检测函数

  btn_grab()

  btn_test()

  wend

  END

  

  

  

  12.在main.bas文件中添加HMI运行界面按下停止按钮响应的函数,并关联动作函数名。

  'HMI界面按下停止按钮时响应的函数

  GLOBAL SUB btn_stop()

  if (2 = main_task_state) then '如果主任务状态处于3即正在连续执行任务时

  main_task_state = 3 '将主任务状态置为3,退出循环

  endif

  END SUB

  

  

  

  

  

  本次,正运动技术机器视觉运动控制一体机应用例程(三) BLOB分析的多圆定位,就分享到这里。

机器视觉运动控制一体机应用例程(三) 基于BLOB分析的多圆定位相关推荐

  1. 机器视觉运动控制一体机应用例程|自动识别工件缺口方向

    一.应用背景 对存在缺口的工件进行下一步加工上料时,需要自动定向识别工件缺口的位置.因工件的外缺口位置往往不统一,所以在工件上料前或者下料后,需要对工件的位置进行纠偏后再进入下一步加工工序,从而使工件 ...

  2. 机器视觉运动控制一体机应用例程|锂电池组装线上的读码应用

    应用背景 读码识别技术作为工业物联网信息收集的关键途径,它在生产型企业中得到了广泛的应用. 锂电池在新能源汽车.消费电子和储能领域都有着不可或缺的地位. 它也与人的生命安全保证密切相关. 因此,锂电池 ...

  3. 机器视觉运动控制一体机应用例程|端子裁切检测

    一.应用背景 端子通常是 指外部导体连接的接线终端,它们的作用主要传递电信号或导电用. 例如,当部件与外电路连接时,需用 连接器 进行连接. 它是将电子设备中内部各电子元器件之间进行电性连接. 连接器 ...

  4. 机器视觉运动控制一体机应用例程|3C电子屏幕裂痕检测

    一.应用背景 3C电子出品质量直接决定了企业的生命线和盈利能力. 随着3C制造技术和人们生活水平的 不断提高,以及3C电子行业的蓬勃发展.各类3C消费电子产品如雨后春笋涌现,其产量也 持续增长,与此同 ...

  5. 机器视觉运动控制一体机应用例程(十)工件圆度检测

    现有的测量工件圆度的方法一般是采用圆度测量仪,其是利用回转轴法测量圆度的长度测量工具.圆度仪分为传感器回转式和工作台回转式两种检测方法. 检测圆度时,样品需要与精密轴系同心安装,精密轴系带着电感式长度 ...

  6. 机器视觉运动控制一体机应用例程|柔性振动盘上料解决方案

    一.什么是柔性振动盘? 柔性振动盘作为高度灵活的.可自定零件的自动化柔性上料机构,解决了由于零件的大小.形状不一导致金属/塑料的零部件产品难以上料的难题.适用于更新换代快,频繁切换物料的工业应用场景, ...

  7. 机器视觉运动控制一体机应用例程|电子烟二维码识别

    方案背景 随着社会生活水平的不断提高,电子烟已普遍成为一种大众消费电子产品. 传统电子烟的烟弹在完成烟油加注完后,仍需依赖于人工使用扫码枪或者半自动设备,在生产的环节中进行至关重要的二维码识别. 这种 ...

  8. 机器视觉运动控制一体机应用例程|轮廓在线提取与轮廓轨迹加工(下)

    应用背景 在实际的机器视觉应用项目中,常常需要提取在相机视野下不同形状的样品,根据样品的轮廓轨迹位置进行轮廓轨迹加工处理. 上期课程中我们讲述了轮廓在线提取与轮廓轨迹加工中视觉的轮廓提取部分.本期课程 ...

  9. 机器视觉运动控制一体机应用例程|包装盒检测解决方案

    应用背景 包装盒被广泛应用于各行各业中,因包装盒具有技术和价格便宜等众多优势,因此被广泛应用于食品.饮料等领域.包装盒外观的好还决定了消费者的第一印象,所以整齐.美观的包装不仅可以对消费者造成视觉冲击 ...

最新文章

  1. (原)JNI中env-GetByteArrayElements和AndroidBitmap_getInfo的冲突
  2. 30. SQL -- 完整性及约束(1)
  3. html 超链接打开Excel,计算机打开Excel超链接时提示的解决方案
  4. 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...
  5. C++中? : 运算符的使用
  6. Dart 1(环境安装)
  7. Linux内核分析:recv、recvfrom、recvmsg函数实现
  8. react 学习与使用记录
  9. 机器学习基础(二)——训练集和测试集的划分
  10. (二)验证码模块(随机英文验证and随机英文数字混合验证+Session)
  11. 医院计算机人员考试试题,医院信息科考试试题及答案-
  12. 当我们谈论Unidbg时我们在谈什么
  13. flink1.14.0+mysql5.7+mysqlcdc2.2.1报错org.apache.flink.shaded.guava18.com.google.common.util.concurren
  14. ps软件哪个好?十年老用户推荐这两个给你
  15. PAT甲级真题目录(按题型整理)(转自柳神)
  16. Vercel搭建属于自己的ChatGPT平台
  17. Android KK平台的一个bug----在收到内容只有一个“=”的信息后,手机自动重启
  18. 《Python3》读书笔记(上)
  19. 计算机对国家发展的作用,自然辩证法毕业论文科技和文化创新对国家发展的作用.docx...
  20. iPhone5设置铃声方法教程

热门文章

  1. 计算机基础知识教程打印a4纸,学会这9个Word打印方法,不浪费任何一张A4纸,涨知识了...
  2. 关于DELL EqualLogic PS6100存储及数据恢复办法的研究
  3. Ancient Printer
  4. php 中文简体和繁体的转换
  5. mysql数据库用户授权_MySQL数据库用户授权(GRANT)
  6. 2016年WINLIN研发和团队计划
  7. 【现代卫星导航系统】之GPS卫星导航系统
  8. 无奈的幸福——致所有无法过光棍节的男人
  9. SQLsever数据库实验(二)
  10. 树莓派网线直连笔记本电脑