
Halcon 的 Hdevelop 可以快速编写算子开发图像处理算法,本文记录将 Hdevelop 代码导出到 C++ 应用程序的方法。

*
* Initialization
dev_update_off ()
dev_close_window ()
dev_open_window_fit_size (0, 0, 1600, 1200, -1, -1, WindowHandle)
*
* Input parameters
read_image (Image, 'printer_chip/printer_chip_01')
MinGray := 128
*
* Code for application
get_printer_chip_regions (Image, ConnectedRegions, MinGray)
*
* Visualization
dev_display (Image)
dev_display (ConnectedRegions)
get_printer_chip_regions 代码threshold (Image, Region, MinGray, 255)
connection (Region, ConnectedRegions)
return ()


cmake,source 和原始的 halcon 工程文件 *.hdev
首先需要 配置好 Halcon 环境变量 最好配置好 Halcon Variable Inspect 插件


#include "HalconCpp.h"
#include "test_pro/source/test_pro.h"
int main()
{
HalconCpp::HImage Image("printer_chip/printer_chip_01");
HalconCpp::HRegion Region;
test_pro::SetResourcePath("test_pro/res_test_pro");
test_pro::get_printer_chip_regions(Image, &Region, 128);
}
SetResourcePath("test_pro/res_test_pro") 指向导出的 halcon 工程 hdev 文件所在文件夹
通过 Halcon 导出工程 植入 VS 的代码有个好处是修改 Halcon 代码后不需要重新编译 VS C++ 工程即可达到修改的效果
threshold (Image, Region, MinGray, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, ConnectedRegions, 'area', 'and', 22311.8, 50000)
return ()

void get_printer_chip_regions(
HalconCpp::HObject const& Image,
HalconCpp::HObject* ConnectedRegions,
HalconCpp::HTuple const& MinGray)
{
static HDevEngineCpp::HDevProcedure procedure(GetProgram(sgResourcePath+"test.hdev"),"get_printer_chip_regions");
HDevEngineCpp::HDevProcedureCall call=procedure;
ParamHandler<HalconCpp::HObject>::SetParameter(call,"Image",Image);
ParamHandler<HalconCpp::HTuple>::SetParameter(call,"MinGray",MinGray);
call.Execute();
if (ConnectedRegions != nullptr)
* ConnectedRegions = ParamHandler<HalconCpp::HObject>::GetParameter(call,"ConnectedRegions");
}


get_printer_chip_regions// Local procedures
void get_printer_chip_regions (HObject ho_Image, HObject *ho_ConnectedRegions, HTuple hv_MinGray)
{
// Local iconic variables
HObject ho_Region;
Threshold(ho_Image, &ho_Region, hv_MinGray, 255);
Connection(ho_Region, &(*ho_ConnectedRegions));
SelectShape((*ho_ConnectedRegions), &(*ho_ConnectedRegions), "area", "and", 22311.8,
50000);
return;
}
#include "HalconCpp.h"
using namespace HalconCpp;
void get_printer_chip_regions(HObject ho_Image, HObject *ho_ConnectedRegions, HTuple hv_MinGray)
{
// Local iconic variables
HObject ho_Region;
Threshold(ho_Image, &ho_Region, hv_MinGray, 255);
Connection(ho_Region, &(*ho_ConnectedRegions));
SelectShape((*ho_ConnectedRegions), &(*ho_ConnectedRegions), "area", "and", 22311.8,
50000);
return;
}
int main()
{
HalconCpp::HImage Image("printer_chip/printer_chip_01");
HalconCpp::HRegion Region;
get_printer_chip_regions(Image, &Region, 128);
//test_pro::SetResourcePath("test_pro/res_test_pro");
//test_pro::get_printer_chip_regions(Image, &Region, 128);
}
