Halcon同类软件 Malcon 识别圆弧上的条码 极坐标转换 PolarTransImageExt

识别圆弧上的条码,涉及到一些极坐标转换的知识

,先要用算子PolarTransImageExt将圆弧转换为矩形,

这样才能被算子FindBarCode识别到。

 

 

 

 

下边讲解下流程:
1、提取出圆弧条码的半径区域和识别角度(一般为360度);

2、圆弧转换为矩形;

3、条码和背景颜色转换下,放大一倍图像;

4、识别条码,得到条码矩形区域;

5、条码矩形区域转换为圆弧区域到原图上;

 

ReadImage(ho_ModelImage, 'logpolar.bmp');//读取图像
Threshold(ho_ModelImage, moDst2, 0, 100);//二值化提取区域
ClosingCircle(moDst2, moDst2, 3.5);//对圆形态学关操作
Connection(moDst2, moDst2);//连通区域
SelectShape(moDst2, Ring, 'width','and', 550, 750);//通过长度挑选区域
SelectShape(Ring, Ring, 'height', 'and', 550, 750);//通过高度挑选区域
ShapeTrans(Ring, OuterCircle, 'outer_circle');//将区域转换为外部圆
Complement(Ring, RegionComplement);//取反
Connection(RegionComplement, ConnectedRegions);//连通区域
SelectShape(ConnectedRegions, ConnectedRegions, 'width', 'and', 450, 650);//通过长度挑选区域
SelectShape(ConnectedRegions, InnerCircle, 'height', 'and', 450, 650);//通过高度挑选区域
SmallestCircle(Ring, Row, Column, OuterRadius);//将区域缩小为一个外部圆
SmallestCircle(InnerCircle, InnerRow, InnerColumn, InnerRadius);//将区域缩小为一个内部圆
WidthPolar := [1440]
HeightPolar := [52.2]
HeightPolar2 := [106.4]
// HeightPolar = OuterRadius - InnerRadius - 10;
//OuterRadius2=OuterRadius-5; InnerRadius2=InnerRadius+5;
OuterRadius2 := [346]
InnerRadius2 := [305]
PolarTransImageExt(ho_ModelImage, moDst, Row, Column, 6.28, 0, OuterRadius2, InnerRadius2, WidthPolar, HeightPolar, "")//将圆转换为矩形
InvertImage(moDst, ImageInvert)//条码要转换为黑色,背景为白色
ZoomImageFactor(ImageInvert, ImageZoomed, 1, 2, '')//条码有点小,放大长度一倍
CreateBarCodeModel('', '', BarCodeHandle)//创建条码实例,用来检测
FindBarCode(ImageZoomed, SymbolRegions, BarCodeHandle, 'Code 128', DecodedDataStrings)//查找code 128格式的条码
ClearBarCodeModel(BarCodeHandle)//清除条码实例,因为已经找到条码了
GetImageSize(ho_ModelImage, Width, Height)//获取图像的长宽
ZoomRegion(SymbolRegions,SymbolRegionsZoom,1,0.5)//对识别出来的条码的区域缩小一倍,因为刚才图像放大一倍了
//将条码区域由矩形转换为弧形,好显示在一开始的图像里
PolarTransRegionInv(SymbolRegionsZoom, CodeRegionCircular, Row, Column, 6.28, 0, OuterRadius2, InnerRadius2, 1440, 52, Width, Height,'nearest_neighbor')
OverpaintRegion(ho_ModelImage, CodeRegionCircular, 255, 0)//将弧形条码区域填充为白色255

posted @ 2021-02-27 11:43  Malcon机器视觉底层库  阅读(586)  评论(0编辑  收藏  举报