halcon第三讲:助手操作

熟悉halcon助手的操作,利用助手快速完成几何测量和车牌识别。

一、测量

为了每次只用一个固定的测量线段进行测量,对于每次来的不同方向的图片先做放射变换进行校正并移到图像中心位置处进行测量。

read_image (Image, '1.jpg')
get_image_size (Image, Width, Height)
rgb1_to_gray (Image, GrayImage)
*二值化
binary_threshold (GrayImage, Region, 'max_separability', 'dark', UsedThreshold)
*反转图像,即用255去减原来像素
invert_image (GrayImage, ImageInvert)

*计算方向角度
orientation_region (Region, Phi)
*计算面积和中心坐标
area_center (Region, Area, Row, Column)

*变换矩阵,每次将图片校正并移到图像中心位置
vector_angle_to_rigid (Row, Column, Phi, Height/2, Width/2, 0, HomMat2D)
*放射变换
affine_trans_image (ImageInvert, ImageAffinTrans, HomMat2D, 'constant', 'false')

运行结果如下:

这里没加载标定文件,得到的只是像素长度,如果对相机进行了标定,加载标定文件,就能得出实际的长度。

二、助手实现车牌识别

读入图像并转灰度

read_image (Image1, '2.jpg')
rgb1_to_gray (Image1, GrayImage1)

打开ocr助手,框选感兴趣区域,输入预期文本(它会在你框选的感兴趣区域内自动进行字符分割,然后将一个个分割的区域与你输入的文本对应起来进行训练),应用快速设置即可识别,如下图所示:

运行结果如下图,识别正确:

三、代码实现车牌识别

注意:读取halcon已经训练好的模型,一般选择'Industrial_0-9A-Z_NoRej.omc',NoRej表示允许出错,如果选择Rej对字符的要求将更严格,正确率也更高,另外halcon训练时是拿黑色字符训练的,所以识别时也要拿黑色的字符区域去进行识别,即转换为白底黑字。

read_image (Image1, '2.jpg')
rgb1_to_gray (Image1, GrayImage1)
invert_image (GrayImage1, ImageInvert1)

gen_rectangle1 (ROI_0, 155.803, 177.1, 177.064, 254.356)
reduce_domain (ImageInvert1, ROI_0, ImageReduced)
threshold (ImageReduced, Regions, 5, 90)
closing_circle (Regions, RegionClosing, 1.5)
connection (RegionClosing, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 46.42, 200)
sort_region (SelectedRegions, SortedRegions, 'character', 'true', 'column')

read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)
*第一个参数为字符分割的区域,第二个参数为分割区域对应的字符图像,halcon训练好的模型是拿黑字训练的,
*所以识别时也要将该区域的字符转为白底黑字
do_ocr_multi_class_mlp (SortedRegions, ImageInvert1, OCRHandle, Class, Confidence)

识别结果如下,识别正确:

猜你喜欢

转载自blog.csdn.net/qq_24946843/article/details/82016965