设置首页收藏本站
开启左侧

区域封闭填充

[复制链接]
我是纯菜 发表于 2025-1-15 06:04:30 | 显示全部楼层 |阅读模式
大佬们,绿色区域应该用什么封闭(红色线条)填充
2.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
风景你好 发表于 2025-1-15 18:45:39 | 显示全部楼层
  1. shape_trans (ROI_0, RegionTrans, 'convex')
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 我是纯菜 发表于 2025-1-15 21:53:32 | 显示全部楼层

这样的话左边的曲线特征丢失了,整体区域变成梯形了,还有其他办法吗
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 我是纯菜 发表于 2025-1-15 21:55:30 | 显示全部楼层
红色线条是我自己手画的,想问一下哪个算子能进行这样的操作
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
gungun 发表于 2025-1-16 09:25:24 | 显示全部楼层
看能不能满足你的需求
1.png 2.png
区域封闭.hdev (566 Bytes, 下载次数: 4, 售价: 3 视觉币)
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
jjx1983 发表于 2025-1-16 11:50:15 | 显示全部楼层
  1. private void action()
  2. {


  3.      // Local iconic variables

  4.      HObject ho_Image, ho_Image1, ho_Image2, ho_Image3;
  5.      HObject ho_Region, ho_RegionClosing, ho_Skeleton, ho_Contours;

  6.      // Local control variables

  7.      HTuple hv_Rows = new HTuple(), hv_Columns = new HTuple();
  8.      HTuple hv_Width = new HTuple(), hv_Height = new HTuple();
  9.      HTuple hv_WindowHandle = new HTuple();
  10.      // Initialize local and output iconic variables
  11.      HOperatorSet.GenEmptyObj(out ho_Image);
  12.      HOperatorSet.GenEmptyObj(out ho_Image1);
  13.      HOperatorSet.GenEmptyObj(out ho_Image2);
  14.      HOperatorSet.GenEmptyObj(out ho_Image3);
  15.      HOperatorSet.GenEmptyObj(out ho_Region);
  16.      HOperatorSet.GenEmptyObj(out ho_RegionClosing);
  17.      HOperatorSet.GenEmptyObj(out ho_Skeleton);
  18.      HOperatorSet.GenEmptyObj(out ho_Contours);
  19.      ho_Image.Dispose();
  20.      HOperatorSet.ReadImage(out ho_Image, "C:/Users/admin/Desktop/q/检测.tif");
  21.      ho_Image1.Dispose(); ho_Image2.Dispose(); ho_Image3.Dispose();
  22.      HOperatorSet.Decompose3(ho_Image, out ho_Image1, out ho_Image2, out ho_Image3
  23.          );
  24.      if (HDevWindowStack.IsOpen())
  25.      {
  26.          HOperatorSet.DispObj(ho_Image2, HDevWindowStack.GetActive());
  27.      }
  28.      ho_Region.Dispose();
  29.      HOperatorSet.Threshold(ho_Image2, out ho_Region, 128, 255);
  30.      ho_RegionClosing.Dispose();
  31.      HOperatorSet.ClosingCircle(ho_Region, out ho_RegionClosing, 17);

  32.      ho_Skeleton.Dispose();
  33.      HOperatorSet.Skeleton(ho_RegionClosing, out ho_Skeleton);

  34.      ho_Contours.Dispose();
  35.      HOperatorSet.GenContourRegionXld(ho_Skeleton, out ho_Contours, "center");
  36.      hv_Rows.Dispose(); hv_Columns.Dispose();
  37.      HOperatorSet.GetContourXld(ho_Contours, out hv_Rows, out hv_Columns);
  38.      List<(double,double)> points = new List<(double,double)>();
  39.      for (int i = 0; i < hv_Rows.Length; i++)
  40.      {
  41.          points.Add((hv_Columns.DArr[i], hv_Rows.DArr[i]));
  42.      }
  43.      var listWithoutDuplicates = points.Distinct().ToList();
  44.      listWithoutDuplicates.Sort((a, b) => b.Item2.CompareTo(a.Item2));
  45.      double max2row = 0;
  46.      int index = 0;
  47.      for (int i = 0; i < listWithoutDuplicates.Count; i++)
  48.      {
  49.          var d = listWithoutDuplicates[i].Item2;
  50.          var count = listWithoutDuplicates.FindAll(x => x.Item2 == d).Count();
  51.          if (count > 1)
  52.          {
  53.              if (max2row < d)
  54.              {
  55.                  max2row = d;
  56.                  index = i;
  57.              }
  58.          }
  59.      }
  60.      HObject line;
  61.      HOperatorSet.GenEmptyObj(out line);
  62.      line.Dispose();
  63.      var list1 = listWithoutDuplicates.FindAll(x => x.Item2 == listWithoutDuplicates[index].Item2);
  64.      list1.Add(listWithoutDuplicates[0]);
  65.      var row = list1.Select(x => x.Item2).ToArray();
  66.      var col = list1.Select(x => x.Item1).ToArray();
  67.      HOperatorSet.GenRegionPolygon(out line, new HTuple(row), new HTuple(col));
  68.      hv_Width.Dispose(); hv_Height.Dispose();
  69.      HOperatorSet.GetImageSize(ho_Image2, out hv_Width, out hv_Height);
  70.      HOperatorSet.SetWindowAttr("background_color", "black");
  71.      HOperatorSet.OpenWindow(0, 0, hv_Width / 4, hv_Height / 4, 0, "visible", "", out hv_WindowHandle);
  72.      HDevWindowStack.Push(hv_WindowHandle);
  73.      if (HDevWindowStack.IsOpen())
  74.      {
  75.          HOperatorSet.DispObj(ho_Image2, HDevWindowStack.GetActive());
  76.          HOperatorSet.DispObj(line, HDevWindowStack.GetActive());
  77.      }






  78.      line.Dispose();
  79.      ho_Image.Dispose();
  80.      ho_Image1.Dispose();
  81.      ho_Image2.Dispose();
  82.      ho_Image3.Dispose();
  83.      ho_Region.Dispose();
  84.      ho_RegionClosing.Dispose();
  85.      ho_Skeleton.Dispose();
  86.      ho_Contours.Dispose();

  87.      hv_Rows.Dispose();
  88.      hv_Columns.Dispose();
  89.      hv_Width.Dispose();
  90.      hv_Height.Dispose();
  91.      hv_WindowHandle.Dispose();

  92. }
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
jjx1983 发表于 2025-1-16 11:53:47 | 显示全部楼层
补一个图,zsbd
屏幕截图 2025-01-16 115242.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 我是纯菜 发表于 2025-1-16 16:42:31 | 显示全部楼层
gungun 发表于 2025-1-16 09:25
看能不能满足你的需求

大佬,为什么我做的是这样的
1-16.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 我是纯菜 发表于 2025-1-16 17:18:57 | 显示全部楼层

谢谢大佬,已经解决了,C#还没怎么学,不太会,哈哈哈
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
寤寐求之 发表于 2025-1-20 09:22:21 | 显示全部楼层
看一下最下面缺口多大,然后使用闭运算矩形结构元素就可以了
closing_rectangle1 (Regions, RegionClosing, 260, 10)

snipaste_20250120_091913.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表