Halcon图像识别——单个字符提取

**代码功能:**选取图片中字符信息并提取出来
**关键算子:**阈值分割(threshold())、形态学闭运算(closing_circle())、连接域(connection())、求交运算(intersection())

*关闭当前窗口
dev_close_window ()
*新建窗口,窗口句柄WindowHandle可用于后面的划矩形区域算子
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*打开目录并选取图片,图片赋予变量Selection
dev_open_file_dialog ('read_image', 'default', 'default', Selection)
*读取图片,并赋予变量Image
read_image (Image, Selection)
*将图片转换成灰度图,并赋予变量GrayImage
rgb1_to_gray (Image, GrayImage)
*阈值划分,选取字符所在区域的阈值区间,即参数中(128, 255)
threshold (GrayImage, Region, 128, 255)
*闭运算,即对所选区域进行膨胀—腐蚀运算,运算半径为1.5
closing_circle (Region, RegionOpening, 1.5)
*将运算后区域进行连接域操作
connection (RegionOpening, ConnectedRegions)
*框选出需要的字符
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
*获取所框选的字符区域
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
*对阈值划分的区域与框选的区域求交,即所得字符
intersection (Rectangle, Region, RegionIntersection)

导入的图片
转换成灰度图
阈值处理
闭运算处理(即膨胀—腐蚀处理)
连接域操作
框选需要的字符
求交得到需要的字符
/手动分割线

//
// File generated by HDevelop for HALCON/.NET (C#) Version 18.05
//
//  This file is intended to be used with the HDevelopTemplate or
//  HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c#

using System;
using HalconDotNet;

public partial class HDevelopExport
{
  public HTuple hv_ExpDefaultWinHandle;

  // Main procedure 
  private void action()
  {


    // Local iconic variables 

    HObject ho_Image, ho_GrayImage, ho_Region;
    HObject ho_RegionOpening, ho_ConnectedRegions, ho_Rectangle;
    HObject ho_RegionIntersection;

    // Local control variables 

    HTuple hv_WindowHandle = new HTuple(), hv_Selection = new HTuple();
    HTuple hv_Row1 = new HTuple(), hv_Column1 = new HTuple();
    HTuple hv_Row2 = new HTuple(), hv_Column2 = new HTuple();
    // Initialize local and output iconic variables 
    HOperatorSet.GenEmptyObj(out ho_Image);
    HOperatorSet.GenEmptyObj(out ho_GrayImage);
    HOperatorSet.GenEmptyObj(out ho_Region);
    HOperatorSet.GenEmptyObj(out ho_RegionOpening);
    HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
    HOperatorSet.GenEmptyObj(out ho_Rectangle);
    HOperatorSet.GenEmptyObj(out ho_RegionIntersection);
    //关闭当前窗口
    //dev_close_window(...);
    //新建窗口,窗口句柄WindowHandle可用于后面的划矩形区域算子
    //dev_open_window(...);
    //打开目录并选取图片,图片赋予变量Selection
    // dev_open_file_dialog(...); only in hdevelop
    //读取图片,并赋予变量Image
    ho_Image.Dispose();
    HOperatorSet.ReadImage(out ho_Image, hv_Selection);
    //将图片转换成灰度图,并赋予变量GrayImage
    ho_GrayImage.Dispose();
    HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);
    //阈值划分,选取字符所在区域的阈值区间,即参数中(128, 255)
    ho_Region.Dispose();
    HOperatorSet.Threshold(ho_GrayImage, out ho_Region, 128, 255);
    //闭运算,即对所选区域进行膨胀—腐蚀运算,运算半径为1.5
    ho_RegionOpening.Dispose();
    HOperatorSet.ClosingCircle(ho_Region, out ho_RegionOpening, 1.5);
    //将运算后区域进行连接域操作
    ho_ConnectedRegions.Dispose();
    HOperatorSet.Connection(ho_RegionOpening, out ho_ConnectedRegions);
    //框选出需要的字符
    hv_Row1.Dispose();hv_Column1.Dispose();hv_Row2.Dispose();hv_Column2.Dispose();
    HOperatorSet.DrawRectangle1(hv_ExpDefaultWinHandle, out hv_Row1, out hv_Column1, 
        out hv_Row2, out hv_Column2);
    //获取所框选的字符区域
    ho_Rectangle.Dispose();
    HOperatorSet.GenRectangle1(out ho_Rectangle, hv_Row1, hv_Column1, hv_Row2, hv_Column2);
    //对阈值划分的区域与框选的区域求交,即所得字符
    ho_RegionIntersection.Dispose();
    HOperatorSet.Intersection(ho_Rectangle, ho_Region, out ho_RegionIntersection);

    ho_Image.Dispose();
    ho_GrayImage.Dispose();
    ho_Region.Dispose();
    ho_RegionOpening.Dispose();
    ho_ConnectedRegions.Dispose();
    ho_Rectangle.Dispose();
    ho_RegionIntersection.Dispose();

    hv_WindowHandle.Dispose();
    hv_Selection.Dispose();
    hv_Row1.Dispose();
    hv_Column1.Dispose();
    hv_Row2.Dispose();
    hv_Column2.Dispose();

  }
  public void InitHalcon()
  {
    // Default settings used in HDevelop 
    HOperatorSet.SetSystem("width", 512);
    HOperatorSet.SetSystem("height", 512);
  }

  public void RunHalcon(HTuple Window)
  {
    hv_ExpDefaultWinHandle = Window;
    action();
  }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值