read_image  ( hImage ,  'E:/vs2012/halcon卡尺例程/白光碗光效果4.bmp' ) 
get_image_pointer1 ( hImage ,  Pointer ,  Type ,  Width ,  Height ) 
* 功能:获取一个通道的指针,得到HTuple   Pointer ,  Type ,  CurWidth ,  CurHeight 
dev_set_draw ( 'margin' ) 
dev_set_color  ( 'green' ) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*  卡尺---X轴 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
* 找边参数:长度m_dMeasureHeight  ,滤波m_dMeasureSmooth  ,对比度m_dMeasureContrast 
draw_rectangle1 ( 3600 ,  Row1 ,  Column1 ,  Row2 ,  Column2 ) 
gen_rectangle1 ( Rectangle ,  Row1 ,  Column1 ,  Row2 ,  Column2 ) 
XResultRows: = [ ]   
XResultCols: = [ ] 
k: = 0 
* 头文件---声明,定义变量 
for  Coli  : =  Column1  to  Column2  by  5 									dLen  : =  ( Row2-Row1 ) / 2 dCol  : =  Coli dRow  : =  ( Row1 + Row2 ) / 2 dPhi: = rad ( 90 ) m_dMeasureHeight: = 5 		m_dMeasureSmooth: = 2 m_dMeasureContrast: = 60 gen_rectangle2 ( Rect ,  dRow ,  dCol ,  dPhi ,  dLen ,  m_dMeasureHeight ) gen_measure_rectangle2 ( dRow , dCol , dPhi , dLen , m_dMeasureHeight ,  Width ,  Height , 'nearest_neighbor' ,  tMeasureHandle ) * measure_pos  ( hImage ,  tMeasureHandle ,  m_dMeasureSmooth ,  m_dMeasureContrast ,  'positive' ,  'last' ,  tTempRow ,  tTempCol ,  NULL ,  NULL ) 		
* 功能:提取与矩形或环状弧垂直的直线边缘  ,last / positive和first / negative决定了找边的方向?  极性选择:暗到亮    measure_pos  ( hImage ,  tMeasureHandle ,  m_dMeasureSmooth ,  m_dMeasureContrast ,  'negative' ,  'first' ,  tTempRow ,  tTempCol ,  NULL ,  NULL ) 
* 极性选择:亮到暗     if (  | tTempRow | = 1 ) 	XResultRows: = [ XResultRows,tTempRow ] XResultCols: = [ XResultCols,tTempCol ] k: = k + 1 endif close_measure ( tMeasureHandle ) 
endfor 
stop  ( ) 			
if  ( k > = 30 ) dev_display ( hImage ) gen_contour_polygon_xld ( hHoleContour , XResultRows , XResultCols ) 	
* 功能:根据区域创建  XLD轮廓 ( contour )    fit_line_contour_xld ( hHoleContour ,  'tukey' ,  - 1 ,  0 ,  5 ,  2 ,  XRowBegin ,  XColBegin ,  XRowEnd ,  XColEnd ,  XNr ,  XNc ,  XDist ) 
* 功能:根据分割线近似获取  XLD轮廓 ( contour )     XCStart  : =  0 XRStart  : =  XDist / XNr     XCEnd  : =  Width XREnd  : =  ( XDist  -  ( XCEnd  *  XNc ) ) / XNr dev_display ( hImage ) gen_contour_polygon_xld  ( XContour ,  [ XRStart,XREnd ] ,  [ XCStart,XCEnd ] ) 
*      gen_region_line ( XLine ,  XRStart ,  XCStart ,  XREnd ,  XCEnd ) * * * * * * * * * 输出X轴角度  * * * * * * * * * angle_ll ( 0 ,  0 ,  0 ,  Width ,  XRStart ,  XCStart ,  XREnd ,  XCEnd ,  XAngle ) 
* 功能:计算两条线的夹角 
else set_tposition ( 3600 ,  100 ,  100 ) write_string ( 3600 ,  '找边失败' )  
endif * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*  卡尺---Y轴 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
draw_rectangle1 ( 3600 ,  Row1 ,  Column1 ,  Row2 ,  Column2 ) 
gen_rectangle1 ( Rectangle ,  Row1 ,  Column1 ,  Row2 ,  Column2 ) 
YResultRows: = [ ]   
YResultCols: = [ ] 
k: = 0 
for  Rowi  : =  Row1  to  Row2  by  5 										dLen  : =  ( Column2-Column1 ) / 2 dRow  : =  Rowi dCol  : =  ( Column1 + Column2 ) / 2 dPhi: = 0 m_dMeasureHeight: = 5 		m_dMeasureSmooth: = 2 m_dMeasureContrast: = 60 gen_rectangle2 ( Rect ,  dRow ,  dCol ,  dPhi ,  dLen ,  m_dMeasureHeight ) gen_measure_rectangle2 ( dRow , dCol , dPhi , dLen , m_dMeasureHeight ,  Width ,  Height , 'nearest_neighbor' ,  tMeasureHandle ) measure_pos  ( hImage ,  tMeasureHandle ,  m_dMeasureSmooth ,  m_dMeasureContrast ,  'positive' ,  'last' ,  tTempRow ,  tTempCol ,  NULL ,  NULL ) 		if (  | tTempRow | = 1 ) 	YResultRows: = [ YResultRows,tTempRow ] YResultCols: = [ YResultCols,tTempCol ] k: = k + 1 endif close_measure ( tMeasureHandle ) 
endfor 
stop  ( ) 			
if  ( k > = 30 ) dev_display ( hImage ) gen_contour_polygon_xld ( hHoleContour , YResultRows , YResultCols ) fit_line_contour_xld ( hHoleContour ,  'tukey' ,  - 1 ,  0 ,  5 ,  2 ,  YRowBegin ,  YColBegin ,  YRowEnd ,  YColEnd ,  YNr ,  YNc ,  YDist ) YRStart  : =  0 YCStart  : =  YDist / YNc     YREnd  : =  Height YCEnd  : =  ( YDist  -  ( YREnd  *  YNr ) ) / YNc dev_display ( hImage ) gen_contour_polygon_xld  ( YContour ,  [ YRStart,YREnd ] ,  [ YCStart,YCEnd ] ) 
*      gen_region_line ( YLine ,  YRStart ,  YCStart ,  YREnd ,  YCEnd ) * * * 输出Y轴角度 angle_ll ( 0 ,  0 ,  0 ,  Width ,  YRStart ,  YCStart ,  YREnd ,  YCEnd ,  YAngle ) 
else set_tposition ( 3600 ,  100 ,  100 ) write_string ( 3600 ,  '找边失败' )  
endif phi: = XAngle-YAngle 
angle: = deg ( phi ) 
* 求交点 
dev_display ( hImage ) 
dev_display  ( XContour ) 
dev_display  ( YContour ) 
dev_set_color ( 'red' ) 
intersection_ll  ( YRStart ,  YCStart ,  YREnd ,  YCEnd ,  XRStart ,  XCStart ,  XREnd ,  XCEnd ,  Row ,  Column ,  IsParallel ) 
* 功能:计算两条线的交集点(相交点) 
gen_circle_contour_xld ( ContCircle ,  Row ,  Column ,  20 ,  0 ,  6.28318 ,  'positive' ,  1 ) 
*  dev_set_color  ( 'green' ) 
*  intersection  ( YLine ,  XLine ,  RegionIntersection ) 
*  area_center  ( RegionIntersection ,  Area ,  Row0 ,  Column0 ) 
*  gen_cross_contour_xld ( Cross0 ,  Row0 ,  Column0 ,  60 ,  0 )