QT5.8配置halcon环境

首先是新建一个qt项目halcon,这里我就不用多说了吧

第二,为了方便:我们将halcon安装目录下的include,lib文件夹拷贝到

这个halcon工程目录下:

第三,接着就是在.pro文件中添加包含目录和库目录。因为我们直接拷贝过来的所以目录比较简单

然后是cpp中的源码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include "halconCpp.h"

using namespace HalconCpp;

void disp_message (HTuple hv_WindowHandle, HTuple hv_String, HTuple hv_CoordSystem,
                   HTuple hv_Row, HTuple hv_Column, HTuple hv_Color, HTuple hv_Box)
{

    // Local iconic variables

    // Local control variables
    HTuple  hv_Red, hv_Green, hv_Blue, hv_Row1Part;
    HTuple  hv_Column1Part, hv_Row2Part, hv_Column2Part, hv_RowWin;
    HTuple  hv_ColumnWin, hv_WidthWin, hv_HeightWin, hv_MaxAscent;
    HTuple  hv_MaxDescent, hv_MaxWidth, hv_MaxHeight, hv_R1;
    HTuple  hv_C1, hv_FactorRow, hv_FactorColumn, hv_UseShadow;
    HTuple  hv_ShadowColor, hv_Exception, hv_Width, hv_Index;
    HTuple  hv_Ascent, hv_Descent, hv_W, hv_H, hv_FrameHeight;
    HTuple  hv_FrameWidth, hv_R2, hv_C2, hv_DrawMode, hv_CurrentColor;

    //This procedure displays text in a graphics window.
    //
    //Input parameters:
    //WindowHandle: The WindowHandle of the graphics window, where
    //   the message should be displayed
    //String: A tuple of strings containing the text message to be displayed
    //CoordSystem: If set to 'window', the text position is given
    //   with respect to the window coordinate system.
    //   If set to 'image', image coordinates are used.
    //   (This may be useful in zoomed images.)
    //Row: The row coordinate of the desired text position
    //   If set to -1, a default value of 12 is used.
    //Column: The column coordinate of the desired text position
    //   If set to -1, a default value of 12 is used.
    //Color: defines the color of the text as string.
    //   If set to [], '' or 'auto' the currently set color is used.
    //   If a tuple of strings is passed, the colors are used cyclically
    //   for each new textline.
    //Box: If Box[0] is set to 'true', the text is written within an orange box.
    //     If set to' false', no box is displayed.
    //     If set to a color string (e.g. 'white', '#FF00CC', etc.),
    //       the text is written in a box of that color.
    //     An optional second value for Box (Box[1]) controls if a shadow is displayed:
    //       'true' -> display a shadow in a default color
    //       'false' -> display no shadow (same as if no second value is given)
    //       otherwise -> use given string as color string for the shadow color
    //
    //Prepare window
    GetRgb(hv_WindowHandle, &hv_Red, &hv_Green, &hv_Blue);
    GetPart(hv_WindowHandle, &hv_Row1Part, &hv_Column1Part, &hv_Row2Part, &hv_Column2Part);
    GetWindowExtents(hv_WindowHandle, &hv_RowWin, &hv_ColumnWin, &hv_WidthWin, &hv_HeightWin);
    SetPart(hv_WindowHandle, 0, 0, hv_HeightWin-1, hv_WidthWin-1);
    //
    //default settings
    if (0 != (hv_Row==-1))
    {
        hv_Row = 12;
    }
    if (0 != (hv_Column==-1))
    {
        hv_Column = 12;
    }
    if (0 != (hv_Color==HTuple()))
    {
        hv_Color = "";
    }
    //
    hv_String = ((""+hv_String)+"").TupleSplit("\n");
    //
    //Estimate extentions of text depending on font size.
    GetFontExtents(hv_WindowHandle, &hv_MaxAscent, &hv_MaxDescent, &hv_MaxWidth, &hv_MaxHeight);
    if (0 != (hv_CoordSystem==HTuple("window")))
    {
        hv_R1 = hv_Row;
        hv_C1 = hv_Column;
    }
    else
    {
        //Transform image to window coordinates
        hv_FactorRow = (1.*hv_HeightWin)/((hv_Row2Part-hv_Row1Part)+1);
        hv_FactorColumn = (1.*hv_WidthWin)/((hv_Column2Part-hv_Column1Part)+1);
        hv_R1 = ((hv_Row-hv_Row1Part)+0.5)*hv_FactorRow;
        hv_C1 = ((hv_Column-hv_Column1Part)+0.5)*hv_FactorColumn;
    }
    //
    //Display text box depending on text size
    hv_UseShadow = 1;
    hv_ShadowColor = "gray";
    if (0 != (HTuple(hv_Box[0])==HTuple("true")))
    {
        hv_Box[0] = "#fce9d4";
        hv_ShadowColor = "#f28d26";
    }
    if (0 != ((hv_Box.TupleLength())>1))
    {
        if (0 != (HTuple(hv_Box[1])==HTuple("true")))
        {
            //Use default ShadowColor set above
        }
        else if (0 != (HTuple(hv_Box[1])==HTuple("false")))
        {
            hv_UseShadow = 0;
        }
        else
        {
            hv_ShadowColor = ((const HTuple&)hv_Box)[1];
            //Valid color?
            try
            {
                SetColor(hv_WindowHandle, HTuple(hv_Box[1]));
            }
            // catch (Exception)
            catch (HalconCpp::HException &HDevExpDefaultException)
            {
                HDevExpDefaultException.ToHTuple(&hv_Exception);
                hv_Exception = "Wrong value of control parameter Box[1] (must be a 'true', 'false', or a valid color string)";
                throw HalconCpp::HException(hv_Exception);
            }
        }
    }
    if (0 != (HTuple(hv_Box[0])!=HTuple("false")))
    {
        //Valid color?
        try
        {
            SetColor(hv_WindowHandle, HTuple(hv_Box[0]));
        }
        // catch (Exception)
        catch (HalconCpp::HException &HDevExpDefaultException)
        {
            HDevExpDefaultException.ToHTuple(&hv_Exception);
            hv_Exception = "Wrong value of control parameter Box[0] (must be a 'true', 'false', or a valid color string)";
            throw HalconCpp::HException(hv_Exception);
        }
        //Calculate box extents
        hv_String = (" "+hv_String)+" ";
        hv_Width = HTuple();
        {
            HTuple end_val93 = (hv_String.TupleLength())-1;
            HTuple step_val93 = 1;
            for (hv_Index=0; hv_Index.Continue(end_val93, step_val93); hv_Index += step_val93)
            {
                GetStringExtents(hv_WindowHandle, HTuple(hv_String[hv_Index]), &hv_Ascent,
                                 &hv_Descent, &hv_W, &hv_H);
                hv_Width = hv_Width.TupleConcat(hv_W);
            }
        }
        hv_FrameHeight = hv_MaxHeight*(hv_String.TupleLength());
        hv_FrameWidth = (HTuple(0).TupleConcat(hv_Width)).TupleMax();
        hv_R2 = hv_R1+hv_FrameHeight;
        hv_C2 = hv_C1+hv_FrameWidth;
        //Display rectangles
        GetDraw(hv_WindowHandle, &hv_DrawMode);
        SetDraw(hv_WindowHandle, "fill");
        //Set shadow color
        SetColor(hv_WindowHandle, hv_ShadowColor);
        if (0 != hv_UseShadow)
        {
            DispRectangle1(hv_WindowHandle, hv_R1+1, hv_C1+1, hv_R2+1, hv_C2+1);
        }
        //Set box color
        SetColor(hv_WindowHandle, HTuple(hv_Box[0]));
        DispRectangle1(hv_WindowHandle, hv_R1, hv_C1, hv_R2, hv_C2);
        SetDraw(hv_WindowHandle, hv_DrawMode);
    }
    //Write text.
    {
        HTuple end_val115 = (hv_String.TupleLength())-1;
        HTuple step_val115 = 1;
        for (hv_Index=0; hv_Index.Continue(end_val115, step_val115); hv_Index += step_val115)
        {
            hv_CurrentColor = ((const HTuple&)hv_Color)[hv_Index%(hv_Color.TupleLength())];
            if (0 != (HTuple(hv_CurrentColor!=HTuple("")).TupleAnd(hv_CurrentColor!=HTuple("auto"))))
            {
                SetColor(hv_WindowHandle, hv_CurrentColor);
            }
            else
            {
                SetRgb(hv_WindowHandle, hv_Red, hv_Green, hv_Blue);
            }
            hv_Row = hv_R1+(hv_MaxHeight*hv_Index);
            SetTposition(hv_WindowHandle, hv_Row, hv_C1);
            WriteString(hv_WindowHandle, HTuple(hv_String[hv_Index]));
        }
    }
    //Reset changed window settings
    SetRgb(hv_WindowHandle, hv_Red, hv_Green, hv_Blue);
    SetPart(hv_WindowHandle, hv_Row1Part, hv_Column1Part, hv_Row2Part, hv_Column2Part);
    return;
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    // Local iconic variables
    QString text;
    HObject  ho_Image, ho_Rectangle1, ho_Rotated;
    HObject  ho_DotImage, ho_ROI_0, ho_ImageePart, ho_Region;
    HObject  ho_ConnectedRegions1, ho_SelectedRegions1, ho_RegionUnion;
    HObject  ho_RegionClosing1, ho_RegionClosing2, ho_Rectangle;
    HObject  ho_RegionClosing3, ho_RegionClosing4, ho_RegionDilation;
    HObject  ho_ConnectedRegions, ho_SelectedRegions2, ho_Partitioned;
    HObject  ho_FinalCharacters, ho_Char, ho_Character, ho_Characters;

    // Local control variables
    HTuple  hv_WindowHandle, hv_Width, hv_Height;
    HTuple  hv_Classes, hv_Row1, hv_Column1, hv_Row2, hv_Column2;
    HTuple  hv_Px, hv_Py, hv_OrientationAngle, hv_HomMat2DIdentity;
    HTuple  hv_HomMat2DRotate, hv_NumIntermediate, hv_i, hv_CharacterNames;
    HTuple  hv_CharacterCount, hv_OCRHandle, hv_Class, hv_Row11;
    HTuple  hv_Column21;

    //    if (HDevWindowStack::IsOpen())
    //        CloseWindow(HDevWindowStack::Pop());

    ReadImage(&ho_Image, "D:/1.bmp");
    GetImageSize(ho_Image, &hv_Width, &hv_Height);

    Hlong lwindowID = (Hlong)this->winId();
    SetWindowAttr("background_color","black");
    OpenWindow(0,0,hv_Width/4,hv_Height/4,lwindowID,"","",&hv_WindowHandle);
    HDevWindowStack::Push(hv_WindowHandle);

    hv_Classes.Clear();
    hv_Classes[0] = "2";
    hv_Classes[1] = "0";
    hv_Classes[2] = "1";
    hv_Classes[3] = "6";
    hv_Classes[4] = "0";
    hv_Classes[5] = "6";
    hv_Classes[6] = "1";
    hv_Classes[7] = "6";
    hv_Classes[8] = "6";
    hv_Classes[9] = "F";
    hv_Classes[10] = "1";
    hv_Classes[11] = "6";
    hv_Classes[12] = "C";
    hv_Classes[13] = "1";
    hv_Classes[14] = "8";
    hv_Classes[15] = "3";
    hv_Classes[16] = "8";
    hv_Classes[17] = "C";
    hv_Row1 = 260.5;
    hv_Column1 = 362.5;
    hv_Row2 = 605.5;
    hv_Column2 = 1532.5;
    hv_Px = hv_Column1+((hv_Column2-hv_Column1)/2);
    hv_Py = hv_Row1+((hv_Row2-hv_Row1)/2);
    GenRectangle1(&ho_Rectangle1, hv_Row1, hv_Column1, hv_Row2, hv_Column2);
    TextLineOrientation(ho_Rectangle1, ho_Image, 35, -0.523599, 0.523599, &hv_OrientationAngle);
    HomMat2dIdentity(&hv_HomMat2DIdentity);
    HomMat2dRotate(hv_HomMat2DIdentity, -hv_OrientationAngle, hv_Px, hv_Py, &hv_HomMat2DRotate);
    AffineTransImage(ho_Image, &ho_Rotated, hv_HomMat2DRotate, "constant", "false");
    DotsImage(ho_Rotated, &ho_DotImage, 11, "dark", 2);
    GenRectangle1(&ho_ROI_0, 260.5, 362.5, 605.5, 1532.5);
    ReduceDomain(ho_DotImage, ho_ROI_0, &ho_ImageePart);
    Threshold(ho_ImageePart, &ho_Region, 75, 255);
    Connection(ho_Region, &ho_ConnectedRegions1);
    SelectShape(ho_ConnectedRegions1, &ho_SelectedRegions1, "area", "and", 10.55, 500);
    Union1(ho_SelectedRegions1, &ho_RegionUnion);

    ClosingRectangle1(ho_RegionUnion, &ho_RegionClosing1, 1, 10);
    ClosingRectangle1(ho_RegionClosing1, &ho_RegionClosing2, 10, 1);
    GenRectangle2(&ho_Rectangle, 16, 16, HTuple(45).TupleRad(), 6, 0);
    Closing(ho_RegionClosing2, ho_Rectangle, &ho_RegionClosing3);

    GenRectangle2(&ho_Rectangle, 2, 2, HTuple(145).TupleRad(), 8, 0);
    Closing(ho_RegionClosing3, ho_Rectangle, &ho_RegionClosing4);
    DilationCircle(ho_RegionClosing4, &ho_RegionDilation, 2);
    Connection(ho_RegionDilation, &ho_ConnectedRegions);
    SelectShape(ho_ConnectedRegions, &ho_SelectedRegions2, "area", "and", 527.52, 5000);

    PartitionDynamic(ho_SelectedRegions2, &ho_Partitioned, 60, 20);
    SortRegion(ho_Partitioned, &ho_FinalCharacters, "character", "true", "row");
    CountObj(ho_FinalCharacters, &hv_NumIntermediate);
    if (HDevWindowStack::IsOpen())
        DispObj(ho_Rotated, HDevWindowStack::GetActive());

    {
        HTuple end_val41 = hv_NumIntermediate;
        HTuple step_val41 = 1;
        for (hv_i=1; hv_i.Continue(end_val41, step_val41); hv_i += step_val41)
        {
            if (HDevWindowStack::IsOpen())
                SetColor(HDevWindowStack::GetActive(),"red");
            SelectObj(ho_FinalCharacters, &ho_Char, hv_i);
            if (HDevWindowStack::IsOpen())
                DispObj(ho_Char, HDevWindowStack::GetActive());
            Intersection(ho_Char, ho_Region, &ho_Character);
            AppendOcrTrainf(ho_Character, ho_Rotated, HTuple(hv_Classes[hv_i-1]), "D:/svm.trf");
        }
    }

    Intersection(ho_FinalCharacters, ho_Region, &ho_Characters);
    if (HDevWindowStack::IsOpen())
        DispObj(ho_Rotated, HDevWindowStack::GetActive());
    if (HDevWindowStack::IsOpen())
        SetColored(HDevWindowStack::GetActive(),6);
    if (HDevWindowStack::IsOpen())
        DispObj(ho_Characters, HDevWindowStack::GetActive());

    ReadOcrTrainfNames("D:/svm.trf", &hv_CharacterNames, &hv_CharacterCount);
    //创建分裂器
    CreateOcrClassSvm(8, 10, "constant", "default", hv_CharacterNames, "rbf", 0.02,
                      0.001, "one-versus-one", "normalization", 0, &hv_OCRHandle);
    TrainfOcrClassSvm(hv_OCRHandle, "D:/svm.trf", 0.001, "default");
    DoOcrMultiClassSvm(ho_Characters, ho_Rotated, hv_OCRHandle, &hv_Class);
    SmallestRectangle1(ho_Characters, &hv_Row11, &hv_Column1, &hv_Row2, &hv_Column21);
    {
        HTuple end_val60 = hv_NumIntermediate;
        HTuple step_val60 = 1;
        for (hv_i=1; hv_i.Continue(end_val60, step_val60); hv_i += step_val60)
        {
            disp_message(3600, HTuple(hv_Class[hv_i-1]), "image", HTuple(hv_Row2[hv_i-1])+100,
                    HTuple(hv_Column1[hv_i-1]), "red", "false");
            QString str = (QString)hv_Class[hv_i - 1].S ();
            text.append (str);
        }
    }
    ui->lineEdit->setText (text);
    ClearOcrClassSvm(hv_OCRHandle);
    // stop(); only in hdevelop
}


ui文件中添加一个按钮,一个lineedit就行了,编译运行。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qt5_qt6

你的鼓励是我们创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值