一、.标准开发流程
二、halcon中的快捷键
1. 另起一行但不运行程序
直接敲击回车,程序将运行。若想在不运行程序的情况另起一行,shift+回车。
2. 重置程序执行(重置变量)
程序中的变量一旦被赋值,其将一直保持该值。若想重置变量并重新执行程序,需首先通过菜单栏“执行”–“重置程序执行”来重置变量。
3. 在图形窗口中只显示某一个图形变量
图形窗口左上角有“清空图形窗口”图标,清空图形窗口后,在图形窗口中单击右键,选择“显示”某一图形变量。前提是,该图形变量已经被赋值。
4. 注释与取消注释快捷键
F4快速注释,F3取消注释。
5. 在图形显示窗口中查看鼠标处信息
按Ctrl键,同时在图形显示窗口中移动鼠标,可以显示鼠标位置以及鼠标所在处的图像灰度值。
三、导出文件
1.Halcon中写完程序,单击:文件—导出
2.弹出对话框中选择格式为c++/halcon
3.自动生成代码.cpp文件
三、创建vs文件
1.建立一个控制台应用工程ConsoleApplication1
在工程中打开刚刚从halcon中导出的cpp文件,然后要删减掉么有用的东西,然后把留下的代码复制到ConsoleApplication1.cpp中
#include "stdafx.h"
#include "HalconCpp.h"
using namespace HalconCpp;
void action()
{
// Local iconic variables
HObject ho_Image, ho_Region, ho_ConnectedRegions;
HObject ho_circleout, ho_ImageReduced, ho_ImageSearch, ho_ImageSearch1;
HObject ho_Contours;
// Local control variables
HTuple hv_Width, hv_Height, hv_WindowHandle;
HTuple hv_Row, hv_Column, hv_Radius, hv_ModelID, hv_RowCheck;
HTuple hv_ColumnCheck, hv_AngleCheck, hv_ScaleR, hv_ScaleC;
HTuple hv_Score;
ReadImage(&ho_Image, "C:/Users/Administrator/Desktop/电池字符识别分类/02图片/有无检测/1.jpg");
GetImageSize(ho_Image, &hv_Width, &hv_Height);
if (HDevWindowStack::IsOpen())
CloseWindow(HDevWindowStack::Pop());
SetWindowAttr("background_color", "black");
OpenWindow(0, 0, hv_Width, hv_Height, 0, "", "", &hv_WindowHandle);
HDevWindowStack::Push(hv_WindowHandle);
if (HDevWindowStack::IsOpen())
SetColor(HDevWindowStack::GetActive(), "red");
if (HDevWindowStack::IsOpen())
DispObj(ho_Image, HDevWindowStack::GetActive());
Threshold(ho_Image, &ho_Region, 0, 128);
Connection(ho_Region, &ho_ConnectedRegions);
DrawCircle(hv_WindowHandle, &hv_Row, &hv_Column, &hv_Radius);
GenCircle(&ho_circleout, hv_Row, hv_Column, hv_Radius);
ReduceDomain(ho_Image, ho_circleout, &ho_ImageReduced);
CreateAnisoShapeModel(ho_ImageReduced, "auto", HTuple(0).TupleRad(), HTuple(360).TupleRad(),
"auto", 0.98, 1.02, "auto", 0.98, 1.02, "auto", "auto", "use_polarity", "auto",
"auto", &hv_ModelID);
//准备一个不可缩放比例的匹配轮廓模型
if (HDevWindowStack::IsOpen())
ClearWindow(HDevWindowStack::GetActive());
if (HDevWindowStack::IsOpen())
SetColor(HDevWindowStack::GetActive(), "blue");
ReadImage(&ho_ImageSearch, "C:/Users/Administrator/Desktop/电池字符识别分类/02图片/有无检测/2.jpg");
FindAnisoShapeModel(ho_ImageSearch, hv_ModelID, HTuple(0).TupleRad(), HTuple(360).TupleRad(),
0.98, 1.02, 0.98, 1.02, 0.5, 1, 0.5, "least_squares_very_high", 0, 0.8, &hv_RowCheck,
&hv_ColumnCheck, &hv_AngleCheck, &hv_ScaleR, &hv_ScaleC, &hv_Score);
//函数说明:在函数图像中找出一个(不可缩放比例的)最佳匹配轮廓
GenCircle(&ho_ImageSearch1, hv_RowCheck, hv_ColumnCheck, hv_Radius);
GenContourRegionXld(ho_ImageSearch1, &ho_Contours, "border");
if (HDevWindowStack::IsOpen())
DispObj(ho_ImageSearch, HDevWindowStack::GetActive());
if (HDevWindowStack::IsOpen())
DispObj(ho_Contours, HDevWindowStack::GetActive());
ClearShapeModel(hv_ModelID);
}
int main(int argc, char *argv[])
{
int ret = 0;
SetSystem("width", 512);
SetSystem("height", 512);
action();
system("pause");
}
2.编译
控制台程序运行后会一闪而过,所以在主函数中加上一个system(“pause”);,然后可以观看效果啦