HALCON示例程序measure_screw.hdev螺纹尺寸测量

HALCON示例程序measure_screw.hdev螺纹尺寸测量

示例程序源码(加注释)

  • 关于显示类函数解释
    dev_update_off ()
    read_image (Image, ‘screw_thread’)
    get_image_pointer1 (Image, Pointer, Type, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width / 2, Height / 2, ‘light gray’, WindowID)
    dev_set_part (0, 0, Height - 1, Width - 1)
    dev_set_line_width (2)
    dev_set_color (‘blue’)
    dev_set_draw (‘margin’)
    dev_display (Image)
    set_display_font (WindowID, 14, ‘mono’, ‘true’, ‘false’)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
    dev_set_draw (‘fill’)
    dev_set_line_width (2)
    dev_set_color (‘black’)
  • 二值化
    threshold (Image, Region, 0, 100)
  • 求区域角度
    orientation_region (Region, OrientationRegion)
  • 求取区域中心
    area_center (Region, Area, RowCenter, ColumnCenter)
  • 由中心点角度生成仿射变换矩阵
    vector_angle_to_rigid (RowCenter, ColumnCenter, OrientationRegion, RowCenter, ColumnCenter, rad(90), HomMat2DRotate)
  • 进行仿射变换
    affine_trans_region (Region, RegionAffineTrans, HomMat2DRotate, ‘nearest_neighbor’)
    dev_clear_window ()
    disp_message (WindowID, ‘Region (transformed)’, ‘window’, -1, -1, ‘black’, ‘false’)
    dev_display (RegionAffineTrans)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
  • 使用圆形进行闭运算
    closing_circle (RegionAffineTrans, RegionToProcess, 4.5)
    dev_clear_window ()
    disp_message (WindowID, ‘Region (transformed)’, ‘window’, -1, -1, ‘black’, ‘false’)
    dev_display (RegionToProcess)
  • get_region_runs - 访问区域的游程编码。
    get_region_runs (RegionToProcess, RowRegionRuns, ColumnBegin, ColumnEnd)
    NumberLines := |RowRegionRuns|
    ColumnBeginSelected := ColumnBegin[90:NumberLines - 90]
    ColumnEndSelected := ColumnEnd[90:NumberLines - 90]
    Diameter := ColumnEndSelected - ColumnBeginSelected + 1
    meanDiameter := mean(Diameter)
    minDiameter := min(Diameter)
    maxDiameter := max(Diameter)
    dev_set_color (‘white’)
  • 生成一个线区域
    gen_region_line (ScanLine1, RowRegionRuns[90], ColumnBegin[90], RowRegionRuns[90], ColumnEnd[90])
    gen_region_line (ScanLine2, RowRegionRuns[NumberLines - 90], ColumnBegin[NumberLines - 90], RowRegionRuns[NumberLines - 90], ColumnEnd[NumberLines - 90])
    dev_display (ScanLine1)
    dev_display (ScanLine2)
  • 显示十字线
    disp_cross (WindowID, RowRegionRuns[90], ColumnBegin[90], 20, 0)
    disp_cross (WindowID, RowRegionRuns[90], ColumnEnd[90], 20, 0)
    disp_cross (WindowID, RowRegionRuns[NumberLines - 90], ColumnBegin[NumberLines - 90], 20, 0)
    disp_cross (WindowID, RowRegionRuns[NumberLines - 90], ColumnEnd[NumberLines - 90], 20, 0)
    disp_message (WindowID, ‘Width of object’, ‘image’, 10, 720, ‘black’, ‘false’)
    disp_message (WindowID, 'per row (between ', ‘image’, 60, 720, ‘black’, ‘false’)
    disp_message (WindowID, ‘the white lines):’, ‘image’, 110, 720, ‘black’, ‘false’)
    disp_message (WindowID, ‘mean width: ’ + meanDiameter + ’ pixels’, ‘image’, 210, 720, ‘black’, ‘false’)
    disp_message (WindowID, ‘minimum width: ’ + minDiameter + ’ pixels’, ‘image’, 260, 720, ‘black’, ‘false’)
    disp_message (WindowID, ‘maximum width: ’ + maxDiameter + ’ pixels’, ‘image’, 310, 720, ‘black’, ‘false’)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
  • 将区域缩小到边缘
    boundary (Region, RegionBorder, ‘inner_filled’)
  • 使用圆形元素膨胀
    dilation_circle (RegionBorder, RegionDilation, 7.5)
  • 缩减定义域
    reduce_domain (Image, RegionDilation, ImageReduced)
    dev_clear_window ()
    dev_display (ImageReduced)
    disp_message (WindowID, ‘ROI for contour extraction’, ‘window’, -1, -1, ‘white’, ‘false’)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
    sigma := 3
  • 用高斯卷积图像。
    derivate_gauss (ImageReduced, DerivGauss, sigma, ‘laplace’)
  • 从亚像素精度的图像中提取值为零的边界。
    zero_crossing_sub_pix (DerivGauss, Edges)
  • 使用连续长度筛选轮廓
    select_contours_xld (Edges, SelectedEdges, ‘contour_length’, 3000, 99999, -0.5, 0.5)
  • 仿射变换
    affine_trans_contour_xld (SelectedEdges, ContoursAffinTrans, HomMat2DRotate)
  • 最小外接矩形
    smallest_rectangle1_xld (ContoursAffinTrans, Row11, Column11, Row21, Column21)
  • 剪切XLD轮廓
    clip_contours_xld (ContoursAffinTrans, ClippedContours, Row11 + 90, 0, Row21 - 90, Width)
  • 拟合直线
    fit_line_contour_xld (ClippedContours, ‘regression’, -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist1)
    dev_clear_window ()
    dev_display (ClippedContours)
    disp_message (WindowID, ‘Contours (transformed and clipped)’, ‘window’, -1, -1, ‘black’, ‘false’)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
  • 生成一个多边形边界
    gen_contour_polygon_xld (RegressContour0, [RowBegin[0],RowEnd[0]], [ColBegin[0],ColEnd[0]])
    select_obj (ClippedContours, EdgeContour0, 1)
  • 返回xld轮廓的位置
    get_contour_xld (EdgeContour0, RowEdge0, ColEdge0)
  • 计算一个电与轮廓之间的距离
    distance_pc (RegressContour0, RowEdge0, ColEdge0, DistanceMin0, DistanceMax0)
    minDistance0 := min(DistanceMin0)
    maxDistance0 := max(DistanceMin0)
    meanDistance0 := mean(DistanceMin0)
    gen_contour_polygon_xld (RegressContour1, [RowBegin[1],RowEnd[1]], [ColBegin[1],ColEnd[1]])
    select_obj (ClippedContours, EdgeContour1, 2)
    get_contour_xld (EdgeContour1, RowEdge1, ColEdge1)
    distance_pc (RegressContour1, RowEdge1, ColEdge1, DistanceMin1, DistanceMax1)
    minDistance1 := min(DistanceMin1)
    maxDistance1 := max(DistanceMin1)
    meanDistance1 := mean(DistanceMin1)
    dev_clear_window ()
    dev_set_color (‘gray’)
    dev_display (EdgeContour0)
    dev_display (EdgeContour1)
    dev_set_color (‘black’)
disp_message (WindowID, 'Contours (transformed and clipped)', 'image', 10, 10, 'black', 'false')
dev_display (RegressContour0)
dev_display (RegressContour1)
disp_message (WindowID, 'Maximum distances', 'image', 10, 720, 'black', 'false')
disp_message (WindowID, 'between contours', 'image', 60, 720, 'black', 'false')
disp_message (WindowID, 'and regression lines:', 'image', 110, 720, 'black', 'false')
* 
disp_message (WindowID, 'max (contour/edge 0): ', 'image', 210, 720, 'black', 'false')
disp_message (WindowID, maxDistance0$'.4' + ' pixels', 'image', 260, 720, 'black', 'false')
* 
disp_message (WindowID, 'max (contour/edge 1): ', 'image', 360, 720, 'black', 'false')
disp_message (WindowID, maxDistance1$'.4' + ' pixels', 'image', 410, 720, 'black', 'false')
* 
disp_message (WindowID, '0', 'image', max([RowBegin[0],RowEnd[0]]) + 20, ColEnd[0] - 9, 'black', 'false')
disp_message (WindowID, '1', 'image', max([RowBegin[1],RowEnd[1]]) + 20, ColEnd[1] - 9, 'black', 'false')

dev_set_color (‘white’)
dev_set_draw (‘margin’)
gen_rectangle1 (Rectangle1, 500, 620, 550, 680)
dev_display (Rectangle1)
dev_open_window (0, Width / 2 + 2, 300, 300, ‘light gray’, WindowHandleZoom)
dev_set_part (500, 620, 550, 680)
dev_set_color (‘black’)
dev_display (EdgeContour0)
dev_display (RegressContour0)
get_contour_xld (RegressContour0, RowContour0, ColContour0)
for i := 800 to 950 by 1

  • projection_pl - 计算点到线的投影。
    projection_pl (RowEdge0[i], ColEdge0[i], RowContour0[0], ColContour0[0], RowContour0[1], ColContour0[1], RowProj0, ColProj0)
    • 从多边形生成xld轮廓
      gen_contour_polygon_xld (Contour, [RowEdge0[i],RowProj0], [ColEdge0[i],ColProj0])
      dev_display (Contour)

endfor
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
dev_close_window ()
dev_set_window (WindowID)
distance_pp (RowBegin[1], ColBegin[1], RowEnd[0], ColEnd[0], Distance1)
distance_pp (RowBegin[0], ColBegin[0], RowEnd[1], ColEnd[1], Distance2)
if (abs(Distance1 - Distance2) < 1)
dev_clear_window ()
dev_set_color (‘gray’)
dev_display (EdgeContour0)
dev_display (EdgeContour1)
dev_set_color (‘black’)
disp_message (WindowID, ‘Contours (transformed and clipped)’, ‘image’, -1, -1, ‘black’, ‘false’)
dev_display (RegressContour0)
dev_display (RegressContour1)
disp_message (WindowID, ‘Mean distance’, ‘image’, 10, 720, ‘black’, ‘false’)
disp_message (WindowID, ‘between regression’, ‘image’, 60, 720, ‘black’, ‘false’)
disp_message (WindowID, ‘lines:’, ‘image’, 110, 720, ‘black’, ‘false’)
disp_message (WindowID, ((Distance1 + Distance2) / 2)$’.4’ + ’ pixels’, ‘image’, 210, 720, ‘black’, ‘false’)
dev_set_draw (‘fill’)
dev_set_color (‘white’)
disp_arrow (WindowID, RowEnd[1] + 100, ColEnd[1], RowBegin[0] + 100, ColBegin[0], 2)
disp_arrow (WindowID, RowBegin[0] + 100, ColBegin[0], RowEnd[1] + 100, ColEnd[1], 2)
else
dev_set_color (‘black’)
disp_message (WindowID, ‘Contours (transformed and clipped)’, ‘image’, -1, -1, ‘black’, ‘false’)
dev_display (RegressContour0)
dev_display (RegressContour1)
disp_message (WindowID, ‘RegressContours’, ‘image’, 10, 720, ‘black’, ‘false’)
disp_message (WindowID, ‘are not parallel’, ‘image’, 60, 720, ‘black’, ‘false’)

endif

处理思路

这个例子是主要讲解了distance_transform算子的应用。

后记

大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

边工作边刷题:70天一遍leetcode: day 97-2

Design Hit Counter 要点&#xff1a;因为是second granularity&#xff0c;所以可以用以秒为单位的circular buffer方法。这题简单在只需要count过去300秒的&#xff0c;增加难度可以count过去秒&#xff0c;分钟&#xff0c;小时。 2个时间点都有可能更新超时的统计&#xff…

cvRemap 对图像进行普通几何变换

cvRemap 对图像进行普通几何变换 函数 cvRemap 利用下面指定的矩阵变换输入图像:   dst(x,y)<-src(mapx(x,y),mapy(x,y))   与其它几何变换类似&#xff0c;可以使用一些插值方法&#xff08;由用户指定&#xff0c;同cvResize&#xff09;来计算非整数坐标的像素值 vo…

disconf(二):服务端使用总结

1、服务端原理客户端启动&#xff0c;把配置文件&#xff0c;配置项存到仓库&#xff0c;等到服务端启动&#xff0c;从服务端拉取数据&#xff1b;服务端更新&#xff0c;则通过zk通知客户端&#xff0c;客户端知道更新后&#xff0c;会从服务端拉取最新的配置文件&#xff0c…

B2C和B2B之间有多大差距

从产品应用的角度&#xff0c;我们团队经历了企图将B2C系统套用到B2B业务流程上的阶段&#xff0c;对于自营业务这还勉强可以实施&#xff0c;但对于外部用户的实施难度就太大了&#xff0c;用户体验也不好。这个过程中&#xff0c;我只关注了技术范畴的迭代速度、而忽略了用户…

h.264 视频解码的一点小经验(ffmpeg)

最近做视频文件264解码&#xff0c;由于对这个领域不是很熟悉&#xff0c;感觉困难重重。不过经过不懈的努力&#xff0c;已经取得一些进展&#xff0c;心里感觉特别庆幸。 刚开始做这个的时候&#xff0c;由于不熟悉&#xff0c;就在网上搜寻资料&#xff0c;网络上的资料虽然…

HALCON示例程序novelty_detection_dyn_threshold.hdev纱网缺陷检测

HALCON示例程序novelty_detection_dyn_threshold.hdev纱网缺陷检测 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_window (‘off’) read_image (Image, ‘plastic_mesh/plastic_mesh_01’) dev_close_window () get_image_size (Image, Width…

配置云服务器 FTP 服务

自己配置的环境: OS: 阿里云 CentOS 6.5 >>Begin: 1. 登录到阿里云服务器(如何登录阿里云服务器), 在root权限下, 通过如下命令安装 vsftp [rootVM_250_202_tlinux ~]# yum install vsftpd 2. 在启动vsftpd服务之前&#xff0c;需要登录云服务器修改配置文件&#xff0c;…

【跃迁之路】【428天】程序员高效学习方法论探索系列(实验阶段185-2018.04.09)...

(跃迁之路)专栏 实验说明 从2017.10.6起&#xff0c;开启这个系列&#xff0c;目标只有一个&#xff1a;探索新的学习方法&#xff0c;实现跃迁式成长实验期2年&#xff08;2017.10.06 - 2019.10.06&#xff09;我将以自己为实验对象。我将开源我的学习方法&#xff0c;方法不断…

opencv中的一些陷阱 坑死我了~~~~(_)~~~~

1.这几天被opencv给坑的够惨&#xff0c;好好的程序&#xff0c;先是因为imread&#xff08;&#xff09;不能读文件&#xff0c;整了很久没整出来&#xff0c;然后改了下path路径&#xff0c;没想到后面彻底奔溃了&#xff0c;&#xff0c;&#xff0c;&#xff0c;前后大概2天…

一篇需要膜拜的文篇--Javascript异步编程模型进化(转)

要我能用得这么熟&#xff0c; 那前端出师了哈。 http://foio.github.io/javascript-asyn-pattern/ 改天一个一个亲测一下。 Javascript语言是单线程的&#xff0c;没有复杂的同步互斥&#xff1b;但是&#xff0c;这并没有限制它的使用范围&#xff1b;相反&#xff0c;借助于…

很强大的FFMPEG API Documentation

http://wiki.aasimon.org/doku.php?idffmpeg:ffmpeg 点击打开链接

HALCON示例程序obj_diff.hdev算子obj_diff 的使用

HALCON示例程序obj_diff.hdev算子obj_diff 的使用 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 read_image (Image, ‘particle’)二值化 threshold (Image, Region, 57, 255)分割连通域 connection (Region, ConnectedRegions) dev_close_window () get…

JS函数方法Call Apply Bind运用

JS 函数非继承的call和apply方法 同&#xff1a;call & apply 主要是用于扩展this指向&#xff0c;降低this作用域与函数之间的耦合度&#xff1b; 区别&#xff1a;传参差异 function.call(this/object,params1,params2,...) 第一个参数为作用域指向参数&#xff0c;后边参…

IplImage, CvMat, Mat 的关系和相互转换 再次理解 /(ㄒoㄒ)/~~

opencv中常见的与图像操作有关的数据容器有Mat&#xff0c;cvMat和IplImage&#xff0c;这三种类型都可以代表和显示图像&#xff0c;但是&#xff0c;Mat类型侧重于计算&#xff0c;数学性较高&#xff0c;openCV对Mat类型的计算也进行了优化。而CvMat和IplImage类型更侧重于“…

HALCON示例程序optical_flow.hdev如何使用optical_flow_mg计算图像序列中的光流以及如何分割光流。

HALCON示例程序optical_flow.hdev如何使用optical_flow_mg计算图像序列中的光流以及如何分割光流。 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_off () dev_close_window () read_image (Image1, ‘xing/xing000’) dev_open_window_fit_ima…

数字信号处理原理

关于傅里叶变换的解释&#xff0c;在下面的链接&#xff1a;http://blog.jobbole.com/70549/ 。讲的挺详细的&#xff1a; 注意点&#xff1a; 1、信号处理基于这么一个概念&#xff0c;待处理的信号&#xff08;&#xff1f;&#xff09;都可以分解为正弦波&#xff0c;不同…

webpack的一些常用配置 (转)

webpack 的配置文件就是 Node 的一个模块&#xff0c;它导出的将是一个对象 module.exports {entry: ./entry,output: {path: path.resolve(__dirname, dist),filename: bundle.js} }如果直接使用 webpack 来执行编译&#xff0c;webpack 默认读取的是当前目录下的 webpack.co…

CvMat,Mat和IplImage之间的转化和拷贝

1、CvMat之间的复制 //注意&#xff1a;深拷贝 - 单独分配空间&#xff0c;两者相互独立 CvMat* a; CvMat* b cvCloneMat(a); //copy a to b 2、Mat之间的复制 //注意&#xff1a;浅拷贝 - 不复制数据只创建矩阵头&#xff0c;数据共享&#xff08;更改a,b,c的任意一…

HALCON示例程序particle.hdev测量小圆部分

HALCON示例程序particle.hdev测量小圆部分 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_off () dev_close_window () dev_open_window (0, 0, 512, 512, ‘black’, WindowID) set_display_font (WindowID, 14, ‘mono’, ‘true’, ‘false’…

Java List 分页

//分页&#xff0c;根据country或者site分br/>Overridepublic List<Integer> getSitesPage(Integer parentLevel, Integer currentPage) {List<Integer> subFrames getSites(parentLevel) ;int currentNum ( currentPage - 1 ) * CardViewUtil.PREPAGE_NUM ;D…