Halcon图像处理入门篇(二)

这篇博客介绍了如何在Visual Studio 2015环境下,利用Halcon 20.11进行图像处理。通过C++代码展示了读取图像、阈值处理、连接操作、形状选择、最小外接矩形、 Laplace滤波、边缘检测等一系列步骤,实现对目标对象的精确轮廓提取。最终,博主给出了实际运行的图像效果和处理结果。
摘要由CSDN通过智能技术生成

Halcon图像处理入门篇之C++

 上一篇说到过halcon的特点在于它实现了从halcon自创语言到C、C++、Java、Python、C#语言的转换,从而为基于图像类的开发节省了大量的宝贵时间。本篇开篇将以C++为例阐述Halcon从验证脚本和C++的无缝连接。

1、开发环境,VS2015,Halcon20.11
2、测试项目
开发环境搭建
1、关于halcon 的License,详情请见4y9b提取码:4y9b
2、halcon转换为C++
图1
3、VS配置
图2
图3
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  // Local iconic variables
  HObject  ho_Image, ho_ThreImage, ho_ConnectImage;
  HObject  ho_SelectImage, ho_GetRec, ho_ROIImage, ho_ImageLaplace;
  HObject  ho_Border, ho_ObjectSelected, ho_SmoothedContours;

  // Local control variables
  HTuple  hv_R1, hv_C1, hv_R2, hv_C2, hv_Row1, hv_Col1;
  HTuple  hv_Row2, hv_Col2, hv_errdist, hv_distRow, hv_a;
  HTuple  hv_e, hv_g, hv_KeyValue, hv_i, hv_result;

  ReadImage(&ho_Image, "C:/test.jpg");
  Threshold(ho_Image, &ho_ThreImage, 0, 4);
  Connection(ho_ThreImage, &ho_ConnectImage);
  SelectShape(ho_ConnectImage, &ho_SelectImage, ((HTuple("area").Append("inner_height")).Append("rect2_len1")), 
      "and", ((HTuple(2000).Append(30)).Append(20)), ((HTuple(10000).Append(100)).Append(60)));
  SmallestRectangle1(ho_SelectImage, &hv_R1, &hv_C1, &hv_R2, &hv_C2);
  if (0 != (int((hv_R1.TupleLength())==0)))
  {
  }
  GenRectangle1(&ho_GetRec, hv_R1-10, hv_C1, hv_R2, hv_C2);
  ReduceDomain(ho_Image, ho_GetRec, &ho_ROIImage);

  LaplaceOfGauss(ho_ROIImage, &ho_ImageLaplace, 0.5);
  ThresholdSubPix(ho_ImageLaplace, &ho_Border, 1);
  SelectObj(ho_Border, &ho_ObjectSelected, 1);
  SmoothContoursXld(ho_ObjectSelected, &ho_SmoothedContours, 15);
  GetContourXld(ho_SmoothedContours, &hv_Row1, &hv_Col1);
  GetContourXld(ho_ObjectSelected, &hv_Row2, &hv_Col2);

  hv_errdist = 0.5;
  hv_distRow = (((hv_Row1-hv_Row2)*(hv_Row1-hv_Row2))+((hv_Col1-hv_Col2)*(hv_Col1-hv_Col2))).TupleSqrt();
  hv_a = (hv_distRow.TupleGreaterElem(hv_errdist)).TupleFind(1);
  hv_e = HTuple(hv_Row2[hv_a]);
  hv_g = HTuple(hv_Col2[hv_a]);
  hv_KeyValue = 0;
  {
  HTuple end_val23 = (hv_e.TupleLength())-1;
  HTuple step_val23 = 1;
  for (hv_i=0; hv_i.Continue(end_val23, step_val23); hv_i += step_val23)
  {
    hv_KeyValue += HTuple(hv_e[hv_i]);
  }
  }
  hv_result = (hv_KeyValue/(220*(hv_e.TupleLength())))+3.2;

输入图像:
在这里插入图片描述

效果
在这里插入图片描述
结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值