当前位置: 首页 > 知识库问答 >
问题:

在等高线openCV中查找直线

楚洋
2023-03-14

然而,大约PolyDP的结果包含如此多的顶点,所以我不能确定它是哪个形状。为了消除顶点,我想检测每个轮廓中的线并找到它们的交点。我怎么能为一个轮廓做到这一点?

共有1个答案

冯枫
2023-03-14

对于圆检测,请使用HoughCircle。

在这里,您只需要寻找简化的多边形(三角形和正方形)。你试过在approxPolyDP中调整epsilon吗?

下面是一个来自openCV方块的示例片段。cpp示例代码-查看如何相对于轮廓大小设置近似精度(epsilon,approxPolyDP的第三个参数)。

C代码,但是openCV接口应该是相同的,所以我相信它很容易适应你的环境。

 // test each contour
  for( size_t i = 0; i < contours.size(); i++ )
      {
          // approximate contour with accuracy proportional
          // to the contour perimeter
      approxPolyDP(Mat(contours[i]), approx, 
                        arcLength(Mat(contours[i]), true)*0.02, true);

          // square contours should have 4 vertices after approximation
          // relatively large area (to filter out noisy contours)
          // and be convex.
          // Note: absolute value of an area is used because
          // area may be positive or negative - in accordance with the
          // contour orientation
      if( approx.size() == 4 &&
         fabs(contourArea(Mat(approx))) > 1000 &&
         isContourConvex(Mat(approx)) )
          {
          double maxCosine = 0;

          for( int j = 2; j < 5; j++ )
              {
                  // find the maximum cosine of the angle between joint edges
              double cosine = fabs(angle(approx[j%4], approx[j-2], approx[j-1]));
              maxCosine = MAX(maxCosine, cosine);
              }

              // if cosines of all angles are small
              // (all angles are ~90 degree) then write quandrange
              // vertices to resultant sequence

          if( maxCosine < 0.3 )
              squares.push_back(approx);
          }
      }
 类似资料:
  • 问题内容: 我在找(但不是画画!)某些数据的等高线: 我知道’cn’包含了我想要的轮廓线,但我似乎无法到达 他们。我试过几种方法: 无济于事。我知道“cn”是一个“轮廓集”,而且是一个数组 我认为“LineCollection”是一个line数组 片段,但我不知道如何提取这些片段。 我的最终目标是创建一个在世界地图上绘制数据的KML文件,并且 这些数据的等高线。 然而,由于我的一些数据点离得很近,

  • 等高线图(也称“水平图”)是一种在二维平面上显示 3D 图像的方法。等高线有时也被称为 “Z 切片”,如果您想要查看因变量 Z 与自变量 X、Y 之间的函数图像变化(即 Z=f(X,Y)),那么采用等高线图最为直观。 自变量 X 和 Y 需要被限制在矩形网格内,您可以将 x 、y 数组作为参数传递给 numpy.meshgrid() 函数来构建一个网格点矩阵。 关于 meshgrid() 函数用法

  • 我想,我很理解函数“cv2.FindOntours(图像、模式、方法)。但我在opencv的一个文档中得到了这个东西轮廓,层次=cv2.FindOntours(thresh,2,1)。我不明白这里2,1的含义以及为什么使用它们。请有人解释一下。

  •        在“操作”菜单栏中点击等高线生成,弹出对话框如下。        加载要生成等高线的地形高程数据,设置导出的文件位置(最后生成为.shp文件),根据已有的地形高程数据进行设置合适的等高线间距(间距大于地形高程则无法生成),点击生成等高线。        点击查看等高线点击查看等高线如图,可以导入可加载shp格式的软件中查看。如果需要预览一片区域的等高线效果,请使用“等高线预览”功能查

  •        在“操作”菜单栏中点击等高线预览,有绘制矩形和选择面生成两种选项,选择范围可以直接选择之前加载或绘制的一块面区域,这里讲绘制矩形生成等高线预览。        左键单击拖拽绘制矩形,再点击左键完成绘制。弹出对话框如下,框里显示的取点密度、等高线间距是系统默认计算的,可以修改。        点击预览,可以在地面上预览看到等高线了。等高线预览是根据内存中加载的地形数据进行采样动态生成的

  •        在“操作”菜单栏中点击等高线预览,有绘制矩形和选择面生成两种选项,选择范围可以直接选择之前加载或绘制的一块面区域,这里讲绘制矩形生成等高线预览。        左键单击拖拽绘制矩形,再点击左键完成绘制。弹出对话框如下,框里显示的取点密度、等高线间距是系统默认计算的,可以修改。        点击预览,可以在地面上预览看到等高线了。等高线预览是根据内存中加载的地形数据进行采样动态生成的