您的位置:首页 > 编程语言 > Qt开发

QT5.8配置halcon环境

2018-03-09 16:09 302 查看
首先是新建一个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, &a
4000
mp;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就行了,编译运行。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: