选择轮廓(select_shape)
Halcon是一款运用广泛的图像识别和处理软件。在肤浅的接触中,它的轮廓选择算子(select_shape)给予我很深的印象。结果是往往几行代码就能够产生很好的效果:
比如要得到这样的结果
只需要
read_image (Image1, , )
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, , )
select_shape (SelectedRegions, SelectedRegions1, ., )
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, , )
select_shape (SelectedRegions, SelectedRegions1, ., )
当然Halcon是在背后做了许多工作的。
几行代码中,比较重要的是算子就是"select_shape"。这个算子的参数很多,我也就比较熟悉这两种。
如果我想在Opencv中也要这样的结果,就需要自己动手尝试实现。实现过程中我采用了类似的函数名表示敬意。
);
,, THRESH_BINARY);
threshold(gray,thresh2,,,THRESH_BINARY_INV);
thresh ;i,),rng.uniform(,),rng.uniform(,));
drawContours(draw,contours,i,color,);
}
;i;i,),rng.uniform(,),rng.uniform(,));
drawContours(draw,result_contours,i,color,);
}
;
minEnclosingCircle((Mat)contour,center,radius);
;
;
;i;i;i,),rng.uniform(,),rng.uniform(,));
drawContours(draw,result_contours,i,color,);
}
,);
,);
,);
//显示结果
imshow("src",src);
imshow("thresh",thresh);
imshow("draw_connection",draw_connection);
imshow("draw_area",draw_area);
imshow("draw_circle",draw_circle);
waitKey();
}
,, THRESH_BINARY);
threshold(gray,thresh2,,,THRESH_BINARY_INV);
thresh ;i,),rng.uniform(,),rng.uniform(,));
drawContours(draw,contours,i,color,);
}
;i;i,),rng.uniform(,),rng.uniform(,));
drawContours(draw,result_contours,i,color,);
}
;
minEnclosingCircle((Mat)contour,center,radius);
;
;
;i;i;i,),rng.uniform(,),rng.uniform(,));
drawContours(draw,result_contours,i,color,);
}
,);
,);
,);
//显示结果
imshow("src",src);
imshow("thresh",thresh);
imshow("draw_connection",draw_connection);
imshow("draw_area",draw_area);
imshow("draw_circle",draw_circle);
waitKey();
}
结果如下,这段代码中还有一个问题,就是计算轮廓圆的性质的方法,我这里采用的是自己想出来的方法,似乎不是很完善,需要进一步找到资料才修正。