read_image (Image0, 'E:/Halcon数据/资源图片/123.png')
//方便灰度筛选 将彩色图像转灰度图像
rgb1_to_gray (Image0, GrayImage)
gen_rectangle1 (ROI_0, 7.89122, 3.68431, 529.134, 943.361)
reduce_domain(GrayImage, ROI_0, ImageReduced)
threshold(ImageReduced, Region, 0, 230)
connection(Region, ConnectedRegions)
//本次筛选最大矩形
select_shape(ConnectedRegions, SelectedRegions, ['area','rectangularity'], 'and',[ 20000,0.8],[100000,1])
smallest_rectangle2(SelectedRegions, Row, Column, Phi, Length1, Length2)
tuple_length (Row, Num)
Length1In := Length1
Length2In:= Length2
PhiIn := Phi
CrossLength:=50
try
if (abs(deg(PhiIn))>45)
PhiIn := rad(deg(PhiIn)-90*(PhiIn/abs(PhiIn)))
Tmp := Length1In
Length1In := Length2In
Length2In := Tmp
endif
tuple_sin (PhiIn, Sin)
tuple_cos (PhiIn, Cos)
* 左上角
dev_set_color ('red')
TopLeft_X := -Length1In*Cos - Length2In*Sin
TopLeft_Y := -Length1In*Sin + Length2In*Cos
TopLeft_Row := Row - TopLeft_Y
TopLeft_Col := Column+TopLeft_X
gen_cross_contour_xld(CrossTopLeft, TopLeft_Row, TopLeft_Col, CrossLength, 0)
* 右上角
dev_set_color ('yellow')
TopRight_X := Length1In*Cos - Length2In*Sin
TopRight_Y := Length1In*Sin + Length2In*Cos
TopRight_Row := Row-TopRight_Y
TopRight_Col := Column+TopRight_X
gen_cross_contour_xld(CrossTopRight, TopRight_Row, TopRight_Col, CrossLength, 0)
* 右下角
dev_set_color ('blue')
LowerRight_X := Length1In*Cos + Length2In*Sin
LowerRight_Y := Length1In*Sin - Length2In*Cos
LowerRight_Row := Row-LowerRight_Y
LowerRight_Col := Column+LowerRight_X
gen_cross_contour_xld(CrossLowerRigh, LowerRight_Row, LowerRight_Col, CrossLength, 0)
* 左下角
dev_set_color ('green')
LowerLeft_X := -Length1In*Cos + Length2In*Sin
LowerLeft_Y := -Length1In*Sin - Length2In*Cos
LowerLeft_Row := Row-LowerLeft_Y
LowerLeft_Col := Column+LowerLeft_X
gen_cross_contour_xld(CrossLowerLeft, LowerLeft_Row, LowerLeft_Col,CrossLength, 0)
reseurt:=1
catch (Exception)
reseurt:=-1
endtry
//根据四点位置可选择该区域内任何位置进行二次定位
gen_rectangle2 (Rectangle, (TopLeft_Row + LowerLeft_Row)/2, (TopLeft_Col + LowerLeft_Col)/2+180, Phi, 30, 30)