Halcon计算目标区域最小外接矩形四点坐标位置算子封装

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值