//此示例显示如何基于由SCARA手眼校准确定的校准信息,使用SCARA机器人执行拾取和放置应用程序。 在第一步骤中,根据模型图像定义形状模型。 然后,基于该形状模型,在每个图像中搜索对象。 对于一个选定的对象,计算可用于掌握该对象的机器人坐标。 为了使该示例适用于实际应用,必须从相机获取图像(而不是从文件读取),并且必须实施机器人的控制(而不是在本示例中被注释掉的相应行)。

//通常,图像必须在匹配之前校正。 如果摄像机完全正交于测量平面,则此步骤可以仅被省略。 要使用提供的示例图像运行示例程序,RectifyImages必须设置为true。
RectifyImages := true
//---------------------------------------------
try    //启动一个程序块,在其中检测和捕获异常
  //读取手眼校正的结果
  read_pose ('cam_in_base_pose.dat', CamInBasePose)//从文本文件中读取3D姿态(外部相机参数的文件名,三维姿态)
  //读取被抓取物体姿态估计所需的数据
  read_cam_par ('camera_parameters.dat', CameraParam)//从文本文件中读取相机的内部参数(相机内部参数的文件名,相机内部参数)
  read_pose ('measurement_plane_in_cam_pose.dat', MPInCamPose)//从文本文件中读取3D姿态(外部相机参数的文件名,三维姿态)
catch (Exception)    //捕获在前面的try块中抛出的异常(返回异常数据的元组)
  //校准信息尚未可用,请使用标准校准信息代替。
  CamInBasePose := [0.05592166548,0.19497621789,0.48025117245,180.09816119,29.85593363,179.94389014,0]
  CameraParam := [0.0165251,-642.277,4.65521e-006,4.65e-006,595.817,521.75,1280,1024]
  MPInCamPose := [0.0045679683065,-0.0028695297318,0.4088853425,359.78658429,29.732027579,0.22946472765,0]
endtry   //结束处理异常的块
//准备纠正map以消除透视图像失真
if (RectifyImages)
  prepare_rectification_map (Map, CameraParam, MPInCamPose, MappingScale, MPInCamPoseMapping) //见下文补充
  image_points_to_world_plane (CameraParam, MPInCamPoseMapping, 0, 0, 'm', MapUpperLeftX, MapUpperLeftY)//将图像点转换为世界坐标系的平面z=0(相机参数,在摄像机坐标下的世界坐标系的三维姿态,要转换的点的行坐标,要转换的点的列坐标,规模或维,点在世界坐标系中的X坐标,点在世界坐标系中的Y坐标)
endif
 
dev_update_off ()    //将dev_update_pc、dev_update_var和dev_update_window设置为“off”
set_system ('border_shape_models', 'true')  //设置HALCON系统参数(要更改的系统参数的名称,系统参数的新值)
 
//在此,应建立与机器人的连接,并将机器人移动到一个确定的备用姿态,以便拍摄测量平面的无遮挡图像。

//定义被抓取对象的形状模型
//-获取模型生成图像
read_image (Image, '3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_01')
if (RectifyImages)
  map_image (Image, Map, ModelImage)//对图像应用一般变换(要映射的图像,包含映射数据的图像,映射图像)
else
  copy_image (Image, ModelImage)//复制一个映像并为它分配新内存
endif

dev_close_window ()  //关闭活动图形窗口
dev_open_window_fit_image (ModelImage, 0, 0, 600, 600, WindowHandle)//打开一个新的图形窗口,该窗口保持给定图像的高宽比(图像以适应新窗口的大小,新窗口左上角的行坐标,新窗口左上角的列坐标,限制窗口宽度,限制窗口高度,新图形窗口的窗口句柄)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')  //设置字体独立于操作系统(窗口的窗口句柄 字体将被设置在其中,Windows系统上的字体大小,字体,粗体,斜体)
dev_clear_window ()    //清除活动图形窗口的内容
dev_display (ModelImage) 
dev_set_line_width (2)  //定义区域轮廓输出的线宽(轮廓模式下区域输出的线宽)
//创建形状模型
gen_rectangle1 (ModelROI, 400, 500, 1100, 1300)  //创建一个平行于坐标轴的矩形(创建矩形,行的左上角点线,列的左上角点线,右下角…,右下…)
gauss_filter (ModelImage, ImageGauss, 5)  //光滑使用离散高斯函数(图象被平滑,过滤像,过滤像的大小)
reduce_domain (ImageGauss, ModelROI, ImageReduced)  //缩小图像的域(输入图像,新定义的域,图像与简化的定义域)
create_shape_model (ImageReduced, 'auto', rad(0), rad(360), 'auto', 'auto', 'use_polarity', [10,50], 'auto', ModelID)  //准备一个形状模型进行匹配(输入图像 其域将用于创建模型,金字塔层的最大数目,最小的图案旋转,旋转角度的范围,角度的步长(分辨率),一种优化和可选的方法用于生成模型,匹配度量,用于模板图像中对象的对比度的阈值或滞后阈值以及可选的对象部件的最小尺寸,最小对比度的对象在搜索图像,模型手柄)
area_center (ModelROI, ModelROIArea, ModelROIRow, ModelROIColumn)  //区域 区域和中心(待审查区域,区域的面积,线的中心索引,列中心索引)
dev_display_shape_matching_results (ModelID, 'green', ModelROIRow, ModelROIColumn, 0, 1, 1, 0)  //显示基于形状的匹配结果(应该显示结果的形状模型的id,用于可视化匹配结果的颜色,找到的模型实例的行坐标,找到的模型实例的列坐标,找到的模型实例的旋转角度,在行方向上找到的模型实例的比例,在列方向上找到的模型实例的比例,找到的模型实例的索引)
//定义物体上的抓取点,可以通过在图像中指示(仅当工具能够以任何方向抓取物体时),也可以通过与机器人一起抓取并记录机器人各自的姿态
DefineGraspingPointByRobot := true
if (DefineGraspingPointByRobot)
  dev_set_colored (12)    //设置多个输出颜色
  GraspingPointModelInBasePose := [0.2592,0.1997,0.1224,0,0,1.2572,0]  
  pose_invert (CamInBasePose, BaseInCamPose)    //在三维姿态元组中反转每个姿态(三维姿态元组,三维倒立姿势的元组)
  pose_to_hom_mat3d (BaseInCamPose, BaseInCamHomMat3D)    //将三维位姿转换为齐次变换矩阵(3 d构成,等价齐次变换矩阵)
  affine_trans_point_3d (BaseInCamHomMat3D, GraspingPointModelInBasePose[0], GraspingPointModelInBasePose[1], GraspingPointModelInBasePose[2], Qx, Qy, Qz)  //对点应用任意的仿射三维变换(输入变换矩阵,输入点(s) (x坐标),输入点(s) (y坐标),输入点(s) (z坐标),输出点(s) (x坐标),输出点(s) (y坐标),输出点(s) (z坐标))
  project_3d_point (Qx, Qy, Qz, CameraParam, GraspingPointModelRow, GraspingPointModelColumn)  //项目3D点到(子)像素图像坐标(,,,投影点的行坐标(像素单位),投影点的列坐标(像素单位))
  GraspingPointModelAngle := GraspingPointModelInBasePose[5]
  if (RectifyImages)
   //计算校正后的图像坐标
    image_points_to_world_plane (CameraParam, MPInCamPoseMapping, GraspingPointModelRow, GraspingPointModelColumn, MappingScale, GraspingPointModelXMP, GraspingPointModelYMP)    //将图像点转换为世界坐标系的平面z=0(相机内部参数,在摄像机坐标下的世界坐标系的三维姿态,要转换的点的行坐标,要转换的点的列坐标,规模或维,点在世界坐标系中的X坐标,点在世界坐标系中的Y坐标)
    GraspingPointModelRow := GraspingPointModelYMP - MapUpperLeftY / MappingScale
    GraspingPointModelColumn := GraspingPointModelXMP - MapUpperLeftX / MappingScale
    //在修正后的模型图像中显示抓取姿态
    get_image_size (ModelImage, WidthM, HeightM)
    CamParamRect := [0,0,MappingScale,MappingScale,-MapUpperLeftX / MappingScale,-MapUpperLeftY / MappingScale,WidthM,HeightM]
    GraspingPointModelXMP := MapUpperLeftX + GraspingPointModelColumn * MappingScale
    GraspingPointModelYMP := MapUpperLeftY + GraspingPointModelRow * MappingScale
    PoseCoordSystemVis := [GraspingPointModelXMP,GraspingPointModelYMP,0,0,0,GraspingPointModelAngle,0]
    dev_set_colored (12)     //设置多个输出颜色
    disp_3d_coord_system (WindowHandle, CamParamRect, PoseCoordSystemVis, 0.02)  //显示三维坐标系的轴(显示坐标系统的窗口,相机参数,要摆的姿势,在世界坐标中坐标轴的长度)
  else
    //在原始模型图像中显示抓取姿态
    pose_invert (CamInBasePose, BaseInCamPose)  //在三维姿态元组中反转每个姿态(三维姿态元组,三维倒立姿势的元组)
    pose_compose (BaseInCamPose, GraspingPointModelInBasePose, PoseCoordSystemVis)  //组合在两个元组中给出的三维姿态(包含左姿态的元组,包含正确姿势的元组,包含返回的姿态的元组)
    dev_set_colored (12)
    disp_3d_coord_system (WindowHandle, CameraParam, PoseCoordSystemVis, 0.02)  //显示三维坐标系的轴(显示坐标系统的窗口,内相机参数,要摆的姿势,在世界坐标中坐标轴的长度)
  endif
  disp_message (WindowHandle, 'Model contours and grasping pose', 'window', 12, 12, 'black', 'true')  //这个程序写一条短信
else
  binary_threshold (ImageReduced, Region, 'max_separability', 'light', UsedThreshold) //使用二值阈值分割图像(输入图像,分段输出地区,分割方法,提取前景还是背景?,使用阈值)
  fill_up (Region, RegionFillUp)    //填补区域的漏洞(包含孔的输入区域,地区填满)
  erosion_rectangle1 (RegionFillUp, RegionErosion, 160, 1)  //侵蚀具有矩形结构元素的区域(被侵蚀的地区,侵蚀的地区,结构矩形的宽度,结构矩形的高度)
  smallest_rectangle2 (RegionErosion, GraspingPointModelRow, GraspingPointModelColumn, Phi, Length1, Length2)  //任意方向的最小周围矩形
  gen_cross_contour_xld (GraspingPointModel, GraspingPointModelRow, GraspingPointModelColumn, 25, 0.785398)
  dev_set_color ('yellow')
  dev_display (GraspingPointModel)
  disp_message (WindowHandle, 'Model contours and grasping point', 'window', 12, 12, 'black', 'true')
endif
area_center (ModelROI, ModelROIArea, ModelROIRow, ModelROIColumn)
set_shape_model_origin (ModelID, GraspingPointModelRow - ModelROIRow, GraspingPointModelColumn - ModelROIColumn)  //设置形状模型的原点(参考点)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()

//在机器人要抓住的物体的图像上循环
pose_to_hom_mat3d (MPInCamPoseMapping, MPInCamHomMat3DMapping)  //将三维位姿转换为齐次变换矩阵
for ImageIdx := 2 to 6 by 1
  * Acquire next image
  read_image (Image, '3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_' + ImageIdx$'02d')
  * 
  //对图像进行校正,以允许标准形状的批配用于搜索对象的实例
  if (RectifyImages)
    map_image (Image, Map, SearchImage)
  else
    copy_image (Image, SearchImage)
  endif
  dev_clear_window ()
  dev_display (SearchImage)
  * 
  * Find instances of the object
  find_shape_model (SearchImage, ModelID, rad(0), rad(360), 0.5, 0, 0.5, 'least_squares', [0,3], 0.9, Row, Column, Angle, Score)
  if (|Row| < 1)
    disp_message (WindowHandle, 'No objects found', 'window', 12, 12, 'black', 'true')
    continue
  endif
  * 
  * Select one specific instance (here: the leftmost)
  LeftmostIdx := sort_index(Column)[0]
  GraspingPointRow := Row[LeftmostIdx]
  GraspingPointColumn := Column[LeftmostIdx]
  GraspingPointAngle := Angle[LeftmostIdx]
  * 
  * Display matching results and indicate object to be grasped
  dev_display_shape_matching_results (ModelID, 'blue', Row, Column, Angle, 1, 1, 0)
  dev_display_shape_matching_results (ModelID, 'green', GraspingPointRow, GraspingPointColumn, GraspingPointAngle, 1, 1, 0)
  disp_message (WindowHandle, |Row| + ' objects found (Green: Object to be grasped)', 'window', 12, 12, 'black', 'true')
  disp_continue_message (WindowHandle, 'black', 'true')
  stop ()
  * 此处先跳过
  * Calculate point to approach
  calculate_point_to_approach_scara_stationary (GraspingPointRow, GraspingPointColumn, GraspingPointAngle + rad(GraspingPointModelAngle), RectifyImages, MapUpperLeftX, MapUpperLeftY, MappingScale, MPInCamHomMat3DMapping, CameraParam, MPInCamPose, CamInBasePose, ObjInBasePose)
  * 
  //与抓取点一起显示被抓取对象
  dev_clear_window ()
  dev_display (SearchImage)
  dev_display_shape_matching_results (ModelID, 'green', GraspingPointRow, GraspingPointColumn, GraspingPointAngle, 1, 1, 0)
  * 
  dev_set_colored (12)
  if (RectifyImages)
    get_image_size (SearchImage, Width, Height)
    CamParamRect := [0,0,MappingScale,MappingScale,-MapUpperLeftX / MappingScale,-MapUpperLeftY / MappingScale,Width,Height]
    GraspingPointXMP := MapUpperLeftX + GraspingPointColumn * MappingScale
    GraspingPointYMP := MapUpperLeftY + GraspingPointRow * MappingScale
    PoseCoordSystemVis := [GraspingPointXMP,GraspingPointYMP,0,0,0,-deg(GraspingPointAngle) + GraspingPointModelAngle,0]
    disp_3d_coord_system (WindowHandle, CamParamRect, PoseCoordSystemVis, 0.02)
  else
    pose_invert (CamInBasePose, BaseInCamPose)
    pose_compose (BaseInCamPose, ObjInBasePose, PoseCoordSystemVis)
    disp_3d_coord_system (WindowHandle, CameraParam, PoseCoordSystemVis, 0.02)
  endif
  * 
  disp_message (WindowHandle, 'Press F5 to pick and place indicated object', 'window', 12, 12, 'black', 'true')
  disp_message (WindowHandle, ['ObjInBasePose:','Tx: ','Ty: ','Tz: ','Alpha: ','Beta: ','Gamma: '] + ['',ObjInBasePose[0:5]$'.3f' + [' m',' m',' m',' deg',' deg',' deg']], 'window', 305, 12, 'black', 'true')
  disp_continue_message (WindowHandle, 'black', 'true')
  stop ()
  * Convert translation part of the pose into mm, if necessary
  ToolInBasePoseMM := [ObjInBasePose[0:2] * 1000,ObjInBasePose[3:6]]
  * 
  * Pick and place the object
  * 
  * Here, the robot should be moved to the above determined pose of the
  * object (ToolInBasePoseMM), where the object should be picked and
  * then placed at some predefined position (something like
  * PlacePositionInBasePoseMM). Finally, the robot should be moved again
  * to the standby pose that allows to take an unoccluded image of the
  * measurement plane.
endfor

* Here, the connection to the robot should be closed.

* Cleanup
clear_shape_model (ModelID)
set_system ('border_shape_models', 'false')
dev_clear_window ()

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

prepare_rectification_map ( : Map : CameraParameters, ObjInCamPose : Scale, ObjInCamPoseMapping )
    简短的描述: 
    章节: 
    本地函数
//修改此姿态,使其绕z轴的方向为零,以确保校正后的图像与原始图像具有相同的方向
pose_to_hom_mat3d (ObjInCamPose, HomMat3D)//将三维位姿转换为齐次变换矩阵(3D姿态_输入控制,等价齐次变换矩阵_输出控制)
hom_mat3d_rotate_local (HomMat3D, rad(-ObjInCamPose[5]), 'z', HomMat3DRotate)//添加一个旋转齐次三维变换矩阵(输入变换矩阵,旋转角度,轴_用来旋转,输出变换矩阵)
hom_mat3d_to_pose (HomMat3DRotate, ObjInCamPoseZ0)//将齐次变换矩阵转换为三维位姿(齐次变换矩阵_入,相当于3d构成_出)
//确定比例,使所映射的图像至少具有与原始图像相同的分辨率
Width := CameraParameters[|CameraParameters| - 2]
Height := CameraParameters[|CameraParameters| - 1]
gen_grid_region (RegionGrid, 20, 20, 'points', Width, Height)//从线或像素创建一个区域(创建线/像素区域_出,步长在行方向或零,步长在列方向或零,创建模式的类型,图案的最大宽度,图案的最大高度)
get_region_points (RegionGrid, Rows, Columns)//访问一个区域的像素(此区域被访问,区域内像素的行号_出,区域内像素的列号_出)
gen_circle_contour_xld (ContCircle, Rows, Columns, gen_tuple_const(|Rows|,1.0), 0, 6.28318, 'positive', 0.1)//创建对应于圆或圆弧的XLD轮廓(产生的轮廓_出,圆心或圆弧的行坐标,圆心或圆弧的列坐标,圆心或圆弧的半径,圆或圆弧起始点的角度[rad],圆或圆弧起终点的角度[rad],点顺序沿圆周或圆弧,相邻等高线点之间的距离)
contour_to_world_plane_xld (ContCircle, ContCircleWorldPlane, CameraParameters, ObjInCamPoseZ0, 'm')//将XLD等值线转换为世界坐标系的平面z=0(输入XLD轮廓以图像坐标转换,转换的XLD等值线在世界坐标_出,相机内部参数,在摄像机坐标下的世界坐标系的三维姿态,规模或维)
fit_ellipse_contour_xld (ContCircleWorldPlane, 'fitzgibbon', -1, 0, 0, 200, 3, 2, Row, Column, Phi, Radius1, Radius2, StartPhi, EndPhi, PointOrder)//用椭圆或椭圆弧近似XLD轮廓(输入轮廓,椭圆拟合算法,用于计算的最大轮廓点数(所有点为-1),轮廓线端点之间的最大距离被认为是“闭合的”,拟合时忽略轮廓开始和结束点的数量,用于Voss方法的圆形段数,鲁棒加权拟合的最大迭代次数,用于消除异常值的剪切因子(典型:'*huber'为1.0,'*tukey'为2.0),椭圆中心的行坐标,列,Phi,较大的半轴的长度,较小的半轴的长度,略,略,沿边界的点顺序)
Scale := min(Radius2)
//确定被映射的图像的位置,即用于创建地图的姿态的原点
set_system ('clip_region', 'false')//设置HALCON系统参数(要更改的系统参数的名称,系统参数的新值)
gen_rectangle1 (ImageArea, 0, 0, Height - 1, Width - 1)//创建一个平行于坐标轴的矩形(创建矩形,略…)
boundary (ImageArea, RegionBorder, 'outer')//把一个区域缩小到它的边界(要计算其边界的区域,产生的边界_出,边界类型)
get_region_points (RegionBorder, BorderRows, BorderColumns)//访问一个区域的像素(该区域被访问,区域内像素的行号,区域内像素的列号)
image_points_to_world_plane (CameraParameters, ObjInCamPoseZ0, BorderRows, BorderColumns, 'm', BorderX, BorderY)//将图像点转换为世界坐标系的平面z=0(相机内部参数,在摄像机坐标下的世界坐标系的三维姿态,要转换的点的行坐标,要转换的点的列坐标,规模或维,点在世界坐标系中的X坐标,点在世界坐标系中的Y坐标)
set_origin_pose (ObjInCamPoseZ0, min(BorderX), min(BorderY), 0, ObjInCamPoseMapping)//平移三维姿态的原点(原始三维姿势,原点在x方向上的平移,原点在y方向上的平移,原点在z方向上的平移,应用平移后生成新的三维姿态)
gen_image_to_world_plane_map (Map, CameraParameters, ObjInCamPoseMapping, Width, Height, int((max(BorderX) - min(BorderX)) / Scale + 0.5), int((max(BorderY) - min(BorderY)) / Scale + 0.5), Scale, 'bilinear')//生成一个投影映射,描述图像平面和世界坐标系的平面z=0之间的映射(包含映射数据的图像,相机内部参数,在摄像机坐标下的世界坐标系的三维姿态,要转换的图像的宽度,要变换的图像的高度,生成的映射图像的宽度(以像素为单位),结果映射图像的高度(以像素为单位),规模和单位,映射的类型)
return ()    //终止过程调用

//-------------------------------------------------------------------------------------------------------------------------------------------

calculate_point_to_approach_scara_stationary ( : : GraspingPointRow, GraspingPointColumn, GraspingPointAngle, RectifyImages, MapUpperLeftX, MapUpperLeftY, MappingScale, MPInCamHomMat3DMapping, CameraParam, MPInCamPose, CamInBasePose : ObjInBasePose )
    简短的描述: Calculate point to approach for SCARA robot with stationary camera.
    章节: Calibration / Hand-Eye
    本地函数
//定义一个姿态,该姿态的平移部分描述了要抓取的对象在摄像机坐标中的位置(注意,该方向仅被设置为零,将在下一步进行校正)
if (RectifyImages)
  GraspingPointXMP := MapUpperLeftX + GraspingPointColumn * MappingScale
  GraspingPointYMP := MapUpperLeftY + GraspingPointRow * MappingScale
else
  image_points_to_world_plane (CameraParam, MPInCamPose, GraspingPointRow, GraspingPointColumn, 'm', GraspingPointXMP, GraspingPointYMP)    //将图像点转换为世界坐标系的平面z=0(相机参数,在摄像机坐标下的世界坐标系的三维姿态,要转换的点的行坐标,要转换的点的列坐标,规模或维,点在世界坐标系中的X坐标,点在世界坐标系中的Y坐标)
endif
affine_trans_point_3d (MPInCamHomMat3DMapping, GraspingPointXMP, GraspingPointYMP, 0, GraspingPointXCam, GraspingPointYCam, GraspingPointZCam)    //对点应用任意的仿射三维变换(输入变换矩阵,输入点(s) (x坐标),输入点(s) (y坐标),输入点(s) (z坐标),输出点(s) (x坐标),输出点(s) (y坐标),输出点(s) (z坐标))
ObjInCamPose := [GraspingPointXCam,GraspingPointYCam,GraspingPointZCam,0,0,0,0]
pose_compose (CamInBasePose, ObjInCamPose, ObjInBasePose)
//校正方向,使z轴与基本姿态的z轴对齐,并考虑到对象的旋转
ObjInBasePose[3:5] := [0,0,fmod(deg(GraspingPointAngle),360.0)]
return ()

Halcon —— pick_and_place_scara_stationary_cam.hdev相关推荐

  1. HALCON示例程序check_blister.hdev药品胶囊检测

    HALCON check_blister.hdev药品胶囊检测 示例程序源码(加注释) 显示.读入图片.设置显示字体等,之前的帖子已经介绍过了 dev_close_window () dev_upda ...

  2. Halcon学习:calibrate_hand_eye_scara_stationary_cam_approx

    *此示例说明了如何执行近似的手眼校准 *对于没有校准板的SCARA机器人.机器人相对于世界坐标系的近似校准或"对齐"假定工具中心点位于工具坐标系中的(未知)位置(0.0,Z),即抓 ...

  3. halcon可以用python吗_如何基于pythonnet调用halcon脚本

    这篇文章主要介绍了如何基于pythonnet调用halcon脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 最近的项目中遇到了使用python程 ...

  4. halcon python 联合开发_使用pythonnet调用halcon脚本

    最近的项目中遇到了使用python程序结合不同部分,其中包括使用halcon处理拍摄到的图像. halcon本身提供了c++与.NET的开发库,但无python库,网上有pyhalcon之类的库,但功 ...

  5. halcon python_使用pythonnet调用halcon脚本

    Python Python开发 Python语言 使用pythonnet调用halcon脚本 最近的项目中遇到了使用python程序结合不同部分,其中包括使用halcon处理拍摄到的图像. halco ...

  6. 【机器视觉】 dev_display算子

    00. 目录 文章目录 00. 目录 01. 概述 02. 签名 03. 描述 04. 注意 05. 参数 06. 结果 07. 附录 01. 概述 dev_display - 在当前图形窗口中显示图 ...

  7. C#中调用halcon引擎来执行hdev程序

    调用halcon引擎有两个直接的好处: 避免C# 与halcon代码混编时可能产生的内存泄露问题 修改halcon程序时不用重新编译C# 勇哥写了一个示例,详细的应用感受和缺点限制勇哥会持续做相关的总 ...

  8. HALCON示例程序train_characters_ocr.hdev使用SVM分类器训练字体

    HALCON示例程序train_characters_ocr.hdev使用SVM分类器训练字体 小哥哥小姐姐觉得有用点个赞呗! 示例程序源码(加注释) 蓝色字体均为算子解释链接,可以前往查看解答 关于 ...

  9. HALCON示例程序vessel.hdev血管的分割与测量

    小哥哥小姐姐觉得有用点个赞呗! HALCON示例程序vessel.hdev血管的分割与测量 示例程序源码(加注释) 关于显示类函数解释 dev_update_window ('off') dev_cl ...

最新文章

  1. Linux Centos 上一些常用的命令
  2. mysql-数据库模式定义语言(DDL)
  3. 图像阈值处理cv2.threshold()函数(python)
  4. SAP物料标准成本估算结果
  5. 外联接、自联接与联合
  6. 要多大内存才满足_佛龛的尺寸要多大?
  7. 洛谷——P2299 Mzc和体委的争夺战
  8. 记录数据库内一条记录的更新时间
  9. android使用lombok_Android Studio 使用Lombok
  10. 使用 jdk 1.8 lambda forEach 对 ArrayList 遍历,数组越界,索引是负数 -15591
  11. 同济大学计算机专业考研的教材,同济大学电子信息(计算机与智能技术)专业考研参考书目-指定教材-辅导资料...
  12. BFS - Marching Legion - ab Knight
  13. E45: ‘readonly‘ option is set (add ! to override)解决办法
  14. python安装后使用pip报错解决方法
  15. 计算机硬盘显示ntfs,电脑硬盘显示NTFS
  16. DeepMind 联合创始人加盟 Google AI【智能快讯】
  17. 极致”神话和产品观念
  18. C语言程序设计(2020)编程题答案——第14章结构体、共用体和用户定义类型
  19. 【大底大顶接近预警】副图指标 分清大顶大底 轻松做波段 通达信 源码
  20. Windows10 64位系统设置FRPC开机自动启动

热门文章

  1. hikaridatasource 加密后登陆不上_python测试开发django42.auth模块登陆认证
  2. 大话中文文本分类之TextRCNN
  3. AltiumDesigner PCB导入CAD
  4. Spring Cloud云服务架构 - common-service 项目构建过程
  5. phpstudy2016安装redis扩展
  6. 【新技术】不用开发者账号申请ios证书真机调试
  7. hibernate正向生成数据库表以及配置——Student.java
  8. new二维数组的几种方法
  9. JavaScript判断是否是手机mobile登录
  10. volcanol_Linux_问题汇总系列_1_系统引导过程中到check filesystem时就无法继续引导问题解决方法。...