aardio调用halcon控件实现:内螺纹压痕缺陷检测

By admin at 2019-03-07 • 0人收藏 • 3311人看过

本示例halcon代码和测试图片来源于:http://www.ihalcon.com/read-11736.html

目前halcon代码自动转换为aar代码工具还在编写,

所以下面的代码是我自己参照halcon代码调用aar中HOperatorSetX库改写来的

注: 这个库请去这个工程目录lib文件夹里查看,对应halcon13.0.2版本

GIF.gif

 

import win.ui;
/*DSG{{*/
mainForm = win.form(text="内螺纹压痕缺陷检测 - aardio版本";right=1177;bottom=674;border="dialog frame")
mainForm.add(
button={cls="button";text='\u2460加载示例图片';left=25;top=16;right=231;bottom=78;z=2};
button2={cls="button";text='\u2461中心区域圆';left=26;top=100;right=232;bottom=162;z=3};
button3={cls="button";text='\u2462查找缺陷';left=25;top=189;right=231;bottom=251;z=4};
button4={cls="button";text="循环识别图像缺陷";left=26;top=319;right=232;bottom=381;font=LOGFONT(h=-20);z=5};
picturebox={cls="picturebox";left=357;top=0;right=1178;bottom=675;border=1;z=1}
)
/*}}*/
import com;
var HOperatorSetX = com.CreateObject("{6ebd90e2-d219-11d2-ade5-0000c00f4ef9}");
var WindowHandle;
var Image;
Image = HOperatorSetX.ReadImage( "img/iir- (3).bmp" );
var Width , Height = HOperatorSetX.GetImageSize( Image );
WindowHandle = HOperatorSetX.OpenWindow( 0 , 0 , mainForm.picturebox.width , mainForm.picturebox.height , mainForm.picturebox.hwnd,"transparent","");

mainForm.button.oncommand = function(id,event){
 Image = HOperatorSetX.ReadImage( "img/iir- (3).bmp" );
 HOperatorSetX.DispObj( Image , WindowHandle );
}
var RegionFillUp;
var ContCircle;
var PolarTransImage;
var Row , Column , Radius , StartPhi , EndPhi , PointOrder;
mainForm.button2.oncommand = function(id,event){
 var Region = HOperatorSetX.Threshold( Image , 170 , 255 );
 var ConnectedRegions = HOperatorSetX.Connection( Region );
 var SelectedRegions = HOperatorSetX.SelectShape( ConnectedRegions , "area" , "and" , 50000 , 999999 );
 RegionFillUp = HOperatorSetX.FillUp( SelectedRegions );
 HOperatorSetX.SetColor( WindowHandle , "green" );
 HOperatorSetX.DispObj( RegionFillUp , WindowHandle );
 
 var Contours = HOperatorSetX.GenContourRegionXld( RegionFillUp , "border_holes" );
 Row , Column , Radius , StartPhi , EndPhi , PointOrder = HOperatorSetX.FitCircleContourXld( Contours ,  "algebraic", -1, 0, 0, 3, 2 );
 ContCircle = HOperatorSetX.GenCircleContourXld( Row , Column , Radius , 0, 6.28318, "positive", 1 );
 HOperatorSetX.SetColor( WindowHandle , "red" );
 HOperatorSetX.SetLineWidth(WindowHandle,3);
 HOperatorSetX.DispObj( ContCircle , WindowHandle );
 
}
mainForm.button3.oncommand = function(id,event){
 HOperatorSetX.ClearWindow( WindowHandle );
 PolarTransImage = HOperatorSetX.PolarTransImageExt( Image , Row , Column , 0, 6.28319, Radius-20, Radius+220, 2500, 300, 'nearest_neighbor' );
 var ImageMax = HOperatorSetX.GrayDilationRect( PolarTransImage , 11 , 31 );
 var Region = HOperatorSetX.Threshold( ImageMax , 180 , 255 );
 var ImageResult = HOperatorSetX.PaintRegion( Region , ImageMax , 170 , "fill" );
 var ImageMean = HOperatorSetX.MeanImage( ImageResult , 21 , 3 );
 var ImageMean1 = HOperatorSetX.MeanImage( ImageMean , 211 , 3 );
 var ImageSub = HOperatorSetX.SubImage( ImageMean , ImageMean1 , 1 , 128 );
 var Region = HOperatorSetX.Threshold( ImageSub , 0 , 88 );
 var Region1 = HOperatorSetX.Threshold( ImageSub , 168 , 255 );
 
 var XYTransRegion = HOperatorSetX.PolarTransRegionInv( Region , Row , Column , 0, 6.28319, Radius-20, Radius+220, 2500, 300, 1600, 1200, 'nearest_neighbor' );
 var XYTransRegion1 = HOperatorSetX.PolarTransRegionInv( Region1 , Row , Column , 0, 6.28319, Radius-20, Radius+220, 2500, 300, 1600, 1200, 'nearest_neighbor' );
 var RegionUnion = HOperatorSetX.Union2( XYTransRegion , XYTransRegion1 );
 var RegionOpening = HOperatorSetX.OpeningCircle( RegionUnion , 3.5 );
 var RegionClosing = HOperatorSetX.ClosingCircle( RegionOpening , 15.5 );
 var ConnectedRegions = HOperatorSetX.Connection( RegionClosing );
 var SelectedRegions = HOperatorSetX.SelectShape( ConnectedRegions , 'area', 'and', 1200, 99999 );
 HOperatorSetX.DispObj( Image , WindowHandle );
 HOperatorSetX.SetColor( WindowHandle , "red" );
 HOperatorSetX.DispObj( SelectedRegions , WindowHandle );
 
}
var indexImg = 1;
mainForm.button4.oncommand = function(id,event){
    
    Image = HOperatorSetX.ReadImage( "img/iir- ("++indexImg++").bmp" );
 var Region = HOperatorSetX.Threshold( Image , 170 , 255 );
 var ConnectedRegions = HOperatorSetX.Connection( Region );
 var SelectedRegions = HOperatorSetX.SelectShape( ConnectedRegions , "area" , "and" , 50000 , 999999 );
 RegionFillUp = HOperatorSetX.FillUp( SelectedRegions );
 
 var Contours = HOperatorSetX.GenContourRegionXld( RegionFillUp , "border_holes" );
 Row , Column , Radius , StartPhi , EndPhi , PointOrder = HOperatorSetX.FitCircleContourXld( Contours ,  "algebraic", -1, 0, 0, 3, 2 );
 ContCircle = HOperatorSetX.GenCircleContourXld( Row , Column , Radius , 0, 6.28318, "positive", 1 );
 
 PolarTransImage = HOperatorSetX.PolarTransImageExt( Image , Row , Column , 0, 6.28319, Radius-20, Radius+220, 2500, 300, 'nearest_neighbor' );
 var ImageMax = HOperatorSetX.GrayDilationRect( PolarTransImage , 11 , 31 );
 var Region = HOperatorSetX.Threshold( ImageMax , 180 , 255 );
 var ImageResult = HOperatorSetX.PaintRegion( Region , ImageMax , 170 , "fill" );
 var ImageMean = HOperatorSetX.MeanImage( ImageResult , 21 , 3 );
 var ImageMean1 = HOperatorSetX.MeanImage( ImageMean , 211 , 3 );
 var ImageSub = HOperatorSetX.SubImage( ImageMean , ImageMean1 , 1 , 128 );
 var Region = HOperatorSetX.Threshold( ImageSub , 0 , 88 );
 var Region1 = HOperatorSetX.Threshold( ImageSub , 168 , 255 );
 
 var XYTransRegion = HOperatorSetX.PolarTransRegionInv( Region , Row , Column , 0, 6.28319, Radius-20, Radius+220, 2500, 300, 1600, 1200, 'nearest_neighbor' );
 var XYTransRegion1 = HOperatorSetX.PolarTransRegionInv( Region1 , Row , Column , 0, 6.28319, Radius-20, Radius+220, 2500, 300, 1600, 1200, 'nearest_neighbor' );
 var RegionUnion = HOperatorSetX.Union2( XYTransRegion , XYTransRegion1 );
 var RegionOpening = HOperatorSetX.OpeningCircle( RegionUnion , 3.5 );
 var RegionClosing = HOperatorSetX.ClosingCircle( RegionOpening , 15.5 );
 var ConnectedRegions = HOperatorSetX.Connection( RegionClosing );
 var SelectedRegions = HOperatorSetX.SelectShape( ConnectedRegions , 'area', 'and', 1200, 99999 );
 HOperatorSetX.DispObj( Image , WindowHandle );
 HOperatorSetX.SetColor( WindowHandle , "red" );
 HOperatorSetX.DispObj( SelectedRegions , WindowHandle );
 indexImg++;
 if(indexImg>8){
  indexImg = 1;
 }
}


mainForm.enableDpiScaling();
mainForm.show();
return win.loopMessage();

 不要看上面代码好多啊, 函数的参数啊,好多啊,

库里面的智能提示会自动帮你写好参数位置, 不需要去记忆.

完整工程代码:

链接:https://pan.baidu.com/s/1iNoiSsiDZpOw-dLXKJKNug
提取码:uk3g

2 个回复 | 最后更新于 2019-03-10
2019-03-10   #1

回复#1 @cuiqbo :

本来示例里就写了①②③,意思就是依次点下去, 这个是分步查看效果

2019-03-10   #2

理解错误了,管理好厉害这个资料很值得学习。

这个有没有库函数的介绍资料。

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...