【halcon每日一练】

判断空图像

gen_empty_obj (TestEmptyObject1)

*创建一个不为空的图像
gen_rectangle1 (Rectangle, 30, 20, 100, 200)
region_to_bin (Rectangle, TestImage, 255, 0, 512, 512)

*方式一:与参考空对象比较是否为空

************************************测试图像为空*****************************
if(TestEmptyObject1==RefEmptyObject)
    dev_get_window (WindowHandle)
    disp_message (WindowHandle, '空对象', 'window', 20, 20, 'black', 'true')
else
    threshold (TestEmptyObject1, Region, 128, 255)
endif
************************************测试图像不为空*****************************
if(TestImage==RefEmptyObject)
    dev_get_window (WindowHandle)
    disp_message (WindowHandle, '空对象', 'window', 20, 20, 'black', 'true')
else
    threshold (TestImage, Region, 128, 255)
endif

*方式二:利用算子比较类似于上述操作符比较

test_equal_obj (TestEmptyObject1, RefEmptyObject, IsEqual)
test_equal_obj (TestImage, RefEmptyObject, IsEqual1)

if(IsEqual1==1)
    dev_get_window (WindowHandle)
    disp_message (WindowHandle, '空对象', 'window', 20, 20, 'black', 'true')
else
    threshold (TestImage, Region, 128, 255)
endif

*方式三:取对象灰度值判断是否为空
get_grayval (TestEmptyObject1, 0, 0, Grayval)
if(Grayval==[])
    disp_message (WindowHandle, '空对象', 'window', 20, 20, 'black', 'true')
endif

判断空区域

*判断是否为空对象的方法--image,region,xld


*****************************************************************************
********************************区域判断是否为空******************************
*****************************************************************************
gen_empty_region (RefEmptyregion)
gen_empty_region (TestEmptyregion)
gen_rectangle1 (Rectangle, 30, 20, 100, 200)

*方式一:操作符判断
if(TestEmptyregion==RefEmptyregion)
    dev_get_window (WindowHandle)
    disp_message (WindowHandle, '空对象', 'window', 20, 20, 'black', 'true')
else
    *do something()
endif

*方式二:操作符判断
test_equal_obj (TestEmptyregion, RefEmptyregion, IsEqual)
test_equal_obj (Rectangle, RefEmptyregion, IsEqual1)

*方式三:计算regin面积判断是否为0
area_center (TestEmptyregion, Area, Row, Column)
area_center (Rectangle, Area1, Row1, Column1)

判断空XLD

*判断是否为空对象的方法--image,region,xld


*****************************************************************************
********************************XLD判断是否为空******************************
*****************************************************************************
gen_empty_obj (EmptyObject)
gen_empty_region (EmptyRegion)
gen_contour_region_xld (EmptyRegion, EmptyContour, 'border')
dev_get_window (WindowHandle)
draw_xld (ContOut,WindowHandle , 'true', 'true', 'true', 'true')

*方式一:操作符判断
if(EmptyContour==EmptyObject)
    dev_get_window (WindowHandle)
    disp_message (WindowHandle, '空对象', 'window', 20, 20, 'black', 'true')
else
    *do something()
endif

*方式二:操作符判断
test_equal_obj (EmptyContour, EmptyObject, IsEqual)
test_equal_obj (ContOut, EmptyObject, IsEqual1)

*方式三:计算轮廓长度
length_xld (EmptyContour, Length)
length_xld (ContOut, Length1)
tuple_length (Length, Vaule)
tuple_length (Length1, Vaule1)

判断数组空

*****************************************************************************
********************************Tuple判断是否为空******************************
*****************************************************************************
EmptyTuple:=[]
TestTuple:=[1,2,3]
TestTuple1:=['a','b']
*方式一:判断数组长度
tuple_length (EmptyTuple, Length)
tuple_length (TestTuple, Length1)
tuple_length (TestTuple1, Length2)

*方式二:算子判断
tuple_is_number (EmptyTuple, IsNumber)
tuple_is_number (TestTuple, IsNumber1)
tuple_is_number (TestTuple1, IsNumber2)

if(|IsNumber|==0)
    *数组为空
endif