具体内容见下一篇记录HALCON匹配助手使用全过程,都是在HALCON中实现并测试稳定后,再转入VS2019

模板是dxf文件:

创建dxf文件的部分内容
CAD等比例缩放图形
cad中如何关掉坐标系显示
CAD中dwg转dxf

先看结果,如图所示:

下面是已经写入VS2019中的c++程序:

void CPropBoundset::OnBnClickedButMatch()
{// TODO: 在此添加控件通知处理程序代码// TODO: 在此添加控件通知处理程序代码// Local iconic variablesHObject  ho_DXFModelContours, ho_ModelContours;HObject  ho_TransContours, ho_Image, ho_ObjectSelected;// Local control variablesHTuple  hv_AcqHandle, hv_DXFStatus, hv_ModelID;HTuple  hv_Row1, hv_Column1, hv_Row2, hv_Column2, hv_RefRow;HTuple  hv_RefColumn, hv_HomMat2D, hv_Width, hv_Height;HTuple  hv_WindowHandle, hv_Number, hv_i, hv_FileHand, hv_ResultHomMat2D;HTuple  hv_Score, hv_I, hv_TempHomMat2D, hv_Row_mid, hv_Column_mid;HTuple  hv_Fin_Mat, hv_j, hv_Row, hv_Column;//Matching 01: Read the dxf fileReadContourXldDxf(&ho_DXFModelContours, "D:/E_Dragon/HALCON_develop1/Template_final.dxf",HTuple(), HTuple(), &hv_DXFStatus);////Matching 01: create the deformable model from dxf contoursCreatePlanarUncalibDeformableModelXld(ho_DXFModelContours, 5, HTuple(0).TupleRad(),HTuple(360).TupleRad(), HTuple(1).TupleRad(), 1, 1, 0.02, 1, 1, 0.02, "none","ignore_color_polarity", 10, HTuple(), HTuple(), &hv_ModelID);////Matching 01: Get the model contour for transforming it later into the imageGetDeformableModelContours(&ho_ModelContours, hv_ModelID, 1);////Matching 01: Set a reference position to show the modelSmallestRectangle1Xld(ho_ModelContours, &hv_Row1, &hv_Column1, &hv_Row2, &hv_Column2);hv_RefRow = ((hv_Row2.TupleMax()) - (hv_Row1.TupleMin())) / 2;hv_RefColumn = ((hv_Column2.TupleMax()) - (hv_Column1.TupleMin())) / 2;VectorAngleToRigid(0, 0, 0, hv_RefRow, hv_RefColumn, 0, &hv_HomMat2D);AffineTransContourXld(ho_ModelContours, &ho_TransContours, hv_HomMat2D);////Matching 01: Display the model contoursif (HDevWindowStack::IsOpen())SetColor(HDevWindowStack::GetActive(), "green");if (HDevWindowStack::IsOpen())SetDraw(HDevWindowStack::GetActive(), "margin");if (HDevWindowStack::IsOpen())DispObj(ho_TransContours, HDevWindowStack::GetActive());CFIRADlg* pMain = (CFIRADlg*)(AfxGetApp()->m_pMainWnd);if (pMain->m_hDevice == NULL) {MessageBoxA("请先打开设备!");return;}/*-------------------------三通道图像转换,把队列中的图片读取成HALCON形式-----------------------------*/GenImageInterleaved(&ho_Image, (long)(pMain->m_pBufferRGB), "rgb", WIDTH, HEIGHT, 0, "byte", 0, 0, 0, 0, -1, 0);MirrorImage(ho_Image, &ho_Image, "row");/*-------------------下面是显示匹配结果的---------------------------------------*/GetImageSize(ho_Image, &hv_Width, &hv_Height);dev_open_window_fit_image(ho_Image, 0, 0, -1, -1, &hv_WindowHandle);set_display_font(hv_WindowHandle, 16, "mono", "true", "false");if (HDevWindowStack::IsOpen())DispObj(ho_Image, HDevWindowStack::GetActive());CountObj(ho_ModelContours, &hv_Number);if (0 != (hv_Number < 1)){disp_message(hv_WindowHandle, "未找到", "window", 12, 12, "black", "true");return;}{HTuple end_val54 = hv_Number;HTuple step_val54 = 1;for (hv_i = 1; hv_i.Continue(end_val54, step_val54); hv_i += step_val54){SelectObj(ho_ModelContours, &ho_ObjectSelected, hv_i);//open_file ('D:/halcon_data/data.xls', 'append', FileHand)//第一行第一列写入,并换列//fwrite_string (FileHand, Row1[i - 1]+'\t')//第一行第二列写入,并换行//fwrite_string (FileHand, Column1[i - 1]+'\t')//第一行第三列写入,并换行//fwrite_string (FileHand, Row2[i - 1]+'\t')//第一行第二列写入,并换列//fwrite_string (FileHand, Column2[i - 1]+'\n')}}//清除句柄//close_file (FileHand)//结果显示////Matching 01: Find the modelFindPlanarUncalibDeformableModel(ho_Image, hv_ModelID, HTuple(0).TupleRad(),HTuple(360).TupleRad(), 1, 1, 1, 1, 0.5, 0, 0.5, 5, 0.75, "subpixel", "least_squares_very_high",&hv_ResultHomMat2D, &hv_Score);////Matching 01: Transform the model contours into the detected positionsif (HDevWindowStack::IsOpen())DispObj(ho_Image, HDevWindowStack::GetActive());{HTuple end_val79 = (hv_Score.TupleLength()) - 1;HTuple step_val79 = 1;for (hv_I = 0; hv_I.Continue(end_val79, step_val79); hv_I += step_val79){hv_TempHomMat2D = hv_ResultHomMat2D.TupleSelectRange(hv_I * 9, (hv_I * 9) + 8);ProjectiveTransContourXld(ho_ModelContours, &ho_TransContours, hv_TempHomMat2D);if (HDevWindowStack::IsOpen())SetColor(HDevWindowStack::GetActive(), "green");if (HDevWindowStack::IsOpen())DispObj(ho_TransContours, HDevWindowStack::GetActive());hv_Row_mid = HTuple::TupleGenSequence(0, 15, 1);hv_Column_mid = HTuple::TupleGenSequence(0, 15, 1);{HTuple end_val88 = hv_Number;HTuple step_val88 = 1;for (hv_i = 1; hv_i.Continue(end_val88, step_val88); hv_i += step_val88){hv_Row_mid[hv_i - 1] = (HTuple(hv_Row1[hv_i - 1]) + HTuple(hv_Row2[hv_i - 1])) / 2;hv_Column_mid[hv_i - 1] = (HTuple(hv_Column1[hv_i - 1]) + HTuple(hv_Column2[hv_i - 1])) / 2;}}hv_Fin_Mat = HTuple::TupleGenSequence(1, 6, 1);for (hv_j = 1; hv_j <= 6; hv_j += 1){hv_Fin_Mat[hv_j - 1] = HTuple(hv_ResultHomMat2D[hv_j - 1]);}AffineTransPoint2d(hv_Fin_Mat, hv_Row_mid, hv_Column_mid, &hv_Row, &hv_Column);OpenFile("D:/halcon_data/data.xls", "output", &hv_FileHand);//循环每一个圆{HTuple end_val104 = hv_Number;HTuple step_val104 = 1;for (hv_i = 1; hv_i.Continue(end_val104, step_val104); hv_i += step_val104){OpenFile("D:/halcon_data/data.xls", "append", &hv_FileHand);//第一行第一列写入a,并换列FwriteString(hv_FileHand, HTuple(hv_Row[hv_i - 1]) + "\t");//第一行第二列写入1,并换行FwriteString(hv_FileHand, HTuple(hv_Column[hv_i - 1]) + "\n");pMain->centerfcalib[hv_i - 1].y = hv_Row[hv_i - 1];pMain->centerfcalib[hv_i - 1].x = hv_Column[hv_i - 1];//第二行第一列写入b,并换列//fwrite_string (FileHand, 'b\t')//第二行第二列写入2,并换行//fwrite_string (FileHand, '2\n')//fwrite_string (FileHand, 'c\t')//fwrite_string (FileHand, '3\n')//清除句柄CloseFile(hv_FileHand);//结果显示//r := Row[i - 1]//c := Column[i - 1]//rds := Radius[i - 1]//disp_message (WindowHandle, '圆心:Row:'+ r + ' Col:' + c, 'window', r, c, 'black', 'true')//disp_message (WindowHandle, '半径:'+ rds, 'window', r+20, c, 'black', 'true')//stop ()}}/*for (int i = 0; i < 16; i++){pMain->centerfcalib[i - 1].y = HTuple (hv_Row[i - 1]);pMain->centerfcalib[i - 1].x = HTuple (hv_Column[i - 1]);}*///for i := 1 to Number by 1//select_obj (ModelContours, ObjectSelected, i)//affine_trans_point_2d (ResultHomMat2D, Row1, Column1, Row_rt, Column_rt)//affine_trans_pixel (TempHomMat2D, Row1, Column1, Row_rt, Column_rt)//vector_to_rigid (Row1, Column1, Row1, Column1, TempHomMat2D)//affine_trans_point_2d (ResultHomMat2D, Row2, Column2, Row_lb, Column_lb)//endfor// stop(...); only in hdevelop}}////Matching 01: Clear model when done// stop(...); only in hdevelopClearDeformableModel(hv_ModelID);
}

记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配(一)相关推荐

  1. 记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配(二)

    本文接着上一篇记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配 打开HALCON并打开匹配助手 匹配助手如图 "创建"页说明: 1,选择匹配方式 中间偏上方的下拉 ...

  2. 记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配(三)

    接着上一篇记录一次HALCON利用匹配助手进行模板匹配详细过程 首先,在匹配助手窗口和采集助手窗口调整参数直到稳定匹配上之后,在实时的状态下点击生成代码 点击完生成了代码,关闭匹配助手窗口和采集助手窗 ...

  3. DL之RNN:人工智能为你写周董歌词——基于TF利用RNN算法实现【机器为你作词】、训练测试过程全记录

    DL之RNN:人工智能为你写周董歌词--基于TF利用RNN算法实现~机器为你作词~.训练&测试过程全记录 目录 输出结果 模型监控 训练.测试过程全记录 训练的数据集 输出结果 1.test0 ...

  4. NLP之WE之Skip-Gram:基于TF利用Skip-Gram模型实现词嵌入并进行可视化、过程全记录

    NLP之WE之Skip-Gram:基于TF利用Skip-Gram模型实现词嵌入并进行可视化 目录 输出结果 代码设计思路 代码运行过程全记录 输出结果 代码设计思路 代码运行过程全记录 3081 or ...

  5. DL之RNN:人工智能为你写代码——基于TF利用RNN算法实现生成编程语言代码(C++语言)、训练测试过程全记录

    DL之RNN:基于TF利用RNN算法实现生成编程语言代码(C语言).训练&测试过程全记录 目录 输出结果 监控模型 训练&测试过程全记录 训练的数据集展示 输出结果 1.test01 ...

  6. DL之CycleGAN:基于TF利用CycleGAN模型对apple2orange数据集实现图像转换—训练测试过程全记录

    DL之CycleGAN:基于TF利用CycleGAN模型对apple2orange数据集实现图像转换-训练&测试过程全记录 目录 apple2orange数据集 输出结果 训练&测试过 ...

  7. TF之pix2pix:基于TF利用Facades数据集训练pix2pix模型、测试并进行生成过程全记录

    TF之pix2pix:基于TF利用Facades数据集训练pix2pix模型.测试并进行生成过程全记录 目录 TB监控 1.SCALARS 2.IMAGES 3.GRAPHS 4.DISTRIBUTI ...

  8. TF之DCGAN:基于TF利用DCGAN测试自己的数据集并进行生成过程全记录

    TF之DCGAN:基于TF利用DCGAN测试自己的数据集并进行生成过程全记录 目录 训练的数据集部分图片 输出结果 1.默认参数输出结果 训练过程全记录 训练的数据集部分图片 以从网上收集了许多日式动 ...

  9. TF之DCGAN:基于TF利用DCGAN测试MNIST数据集并进行生成过程全记录

    TF之DCGAN:基于TF利用DCGAN测试MNIST数据集并进行生成 目录 测试结果 测试过程全记录 测试结果 train_00_0099 train_00_0799 train_00_0899 t ...

最新文章

  1. 爱了!Intellij IDEA 自带的 Vim 插件真心不错
  2. Android 正则表达式实例
  3. php 正则教程,最通俗易懂的php正则表达式教程(上)
  4. 【测试】RPA产品初体验
  5. mongodb系列-访问控制
  6. 网页小图标Favicon
  7. 人民的名义中,为什么蔡成功的贷款这么难?
  8. lnmp基于fastcgi实现nginx_php_mysql的分离_LNMP基于FastCGI实现Nginx,PHP,MySQL的分离
  9. Pandas dtypes(数据类型)
  10. java objective-c_Objective-C基础教程学习笔记(附录)从Java转向Objective-C
  11. python测开课程_2020年第五期《python接口自动化+测试开发》课程,10月11号开学(火热报名中!)...
  12. DUMP-CX_SY_OPEN_SQL_DB-DBSQL_DUPLICATE_KEY_ERROR
  13. 飞机大战游戏源html代码,HTML5全民飞机大战游戏代码
  14. linux qq传文件怎么安装,在Ubuntu Linux下怎样安装QQ
  15. 函数发生器课程设计(Multisim仿真+PCB实物)
  16. 家里电线装多大的好?
  17. 用Python自动清理系统垃圾,再也不用360安全卫士了
  18. ブランドは、同社とその製品、サービス
  19. python 空数组判断
  20. 单片机 c语言 p1控制流水灯,单片机控制的流水灯程序

热门文章

  1. 未发现缺陷(NDF)定义及预防
  2. 湖南大学python头歌实训-循环语句
  3. photoshop cs5在win8.1上安装启动问题
  4. android raw rgb 转换器,raw图像格式转换工具——Iridient Developer Mac
  5. 短时主频点特征对声音表达能力探究1
  6. 梦幻联动-MogDB与ShardingSphere在TPC-C上的表现
  7. 赛门铁克软件(北京)有限公司:有关更新赛门铁克防病毒软件病毒定义代码的问题
  8. 我们为什么很难坚持下去
  9. 关于字符编码,中文所占字节的整理。
  10. 网易有道2017校园招聘编程题——洗牌