OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
cv::Subdiv2D 类参考

#include <opencv2/imgproc.hpp>

cv::Subdiv2D 的协作图

结构体  QuadEdge
 
结构体  Vertex
 

公开类型

enum  {
  PTLOC_ERROR = -2 ,
  PTLOC_OUTSIDE_RECT = -1 ,
  PTLOC_INSIDE = 0 ,
  PTLOC_VERTEX = 1 ,
  PTLOC_ON_EDGE = 2
}
 
enum  {
  NEXT_AROUND_ORG = 0x00 ,
  NEXT_AROUND_DST = 0x22 ,
  PREV_AROUND_ORG = 0x11 ,
  PREV_AROUND_DST = 0x33 ,
  NEXT_AROUND_LEFT = 0x13 ,
  NEXT_AROUND_RIGHT = 0x31 ,
  PREV_AROUND_LEFT = 0x20 ,
  PREV_AROUND_RIGHT = 0x02
}
 

公开成员函数

 Subdiv2D ()
 
 Subdiv2D (Rect rect)
 
 Subdiv2D (Rect2f rect2f)
 
int edgeDst (int edge, Point2f *dstpt=0) const
 返回边的目标点。
 
int edgeOrg (int edge, Point2f *orgpt=0) const
 返回边的起始点。
 
int findNearest (Point2f pt, Point2f *nearestPt=0)
 查找离给定点最近的细分顶点。
 
int getEdge (int edge, int nextEdgeType) const
 返回与给定边相关的边之一。
 
void getEdgeList (std::vector< Vec4f > &edgeList) const
 返回所有边的列表。
 
void getLeadingEdgeList (std::vector< int > &leadingEdgeList) const
 返回与每个三角形相连的起始边 ID 列表。
 
void getTriangleList (std::vector< Vec6f > &triangleList) const
 返回所有三角形的列表。
 
Point2f getVertex (int vertex, int *firstEdge=0) const
 从顶点 ID 返回顶点位置。
 
void getVoronoiFacetList (const std::vector< int > &idx, std::vector< std::vector< Point2f > > &facetList, std::vector< Point2f > &facetCenters)
 返回所有 Voronoi 面的列表。
 
void initDelaunay (Rect rect)
 创建一个新的空的 Delaunay 细分。
 
void initDelaunay (Rect2f rect)
 创建一个新的空的 Delaunay 细分。
 
void insert (const std::vector< Point2f > &ptvec)
 将多个点插入 Delaunay 三角剖分。
 
int insert (Point2f pt)
 将单个点插入 Delaunay 三角剖分。
 
int locate (Point2f pt, int &edge, int &vertex)
 返回点在 Delaunay 细分中的位置。
 
int nextEdge (int edge) const
 返回边起始点周围的下一条边。
 
int rotateEdge (int edge, int rotate) const
 返回同一 quad-edge 的另一条边。
 
int symEdge (int edge) const
 

保护成员函数

void 计算 Voronoi 图 ()
 
void checkSubdiv () const
 
void 清除 Voronoi 图 ()
 
int connectEdges (int edgeA, int edgeB)
 
void deleteEdge (int edge)
 
void deletePoint (int vtx)
 
int isRightOf (Point2f pt, int edge) const
 
int 新建边 ()
 
int newPoint (Point2f pt, bool isvirtual, int firstEdge=0)
 
void setEdgePoints (int edge, int orgPt, int dstPt)
 
void splice (int edgeA, int edgeB)
 
void swapEdges (int edge)
 

保护属性

Point2f bottomRight
 边界矩形的右下角。
 
int 释放点
 
int 释放 QEdge
 
std::vector< QuadEdgeqedges
 所有的边。
 
int 最近的边
 
Point2f topLeft
 边界矩形的左上角。
 
bool validGeometry
 
std::vector< Vertexvtx
 所有的顶点。
 

成员枚举文档

◆ 匿名枚举

匿名枚举

Subdiv2D 点位置情况

枚举值 (Enumerator)
PTLOC_ERROR 

点位置错误。

PTLOC_OUTSIDE_RECT 

点在细分边界矩形之外。

PTLOC_INSIDE 

点在某个区域内部。

PTLOC_VERTEX 

点与细分顶点重合。

PTLOC_ON_EDGE 

点在某个边上。

◆ 匿名枚举

匿名枚举

Subdiv2D 边类型导航 (参见:getEdge())

枚举值 (Enumerator)
NEXT_AROUND_ORG 
NEXT_AROUND_DST 
PREV_AROUND_ORG 
PREV_AROUND_DST 
NEXT_AROUND_LEFT 
NEXT_AROUND_RIGHT 
PREV_AROUND_LEFT 
PREV_AROUND_RIGHT 

构造函数与析构函数说明

◆ Subdiv2D() [1/3]

cv::Subdiv2D::Subdiv2D ( )
Python
cv.Subdiv2D() -> <Subdiv2D 对象>
cv.Subdiv2D(rect) -> <Subdiv2D 对象>
cv.Subdiv2D(rect2f) -> <Subdiv2D 对象>

创建一个空的 Subdiv2D 对象。要创建一个新的空的 Delaunay 细分,您需要使用 initDelaunay 函数。

◆ Subdiv2D() [2/3]

cv::Subdiv2D::Subdiv2D ( Rect rect)
Python
cv.Subdiv2D() -> <Subdiv2D 对象>
cv.Subdiv2D(rect) -> <Subdiv2D 对象>
cv.Subdiv2D(rect2f) -> <Subdiv2D 对象>

这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数不同。

参数
rect包含将添加到细分中的所有二维点的矩形。

该函数创建一个空的 Delaunay 细分,可以使用 insert() 函数添加二维点。所有要添加的点都必须在指定的矩形内,否则会引发运行时错误。

◆ Subdiv2D() [3/3]

cv::Subdiv2D::Subdiv2D ( Rect2f rect2f)
Python
cv.Subdiv2D() -> <Subdiv2D 对象>
cv.Subdiv2D(rect) -> <Subdiv2D 对象>
cv.Subdiv2D(rect2f) -> <Subdiv2D 对象>

这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数不同。

成员函数说明

◆ calcVoronoi()

void cv::Subdiv2D::calcVoronoi ( )
保护

◆ checkSubdiv()

void cv::Subdiv2D::checkSubdiv ( ) const
保护

◆ clearVoronoi()

void cv::Subdiv2D::clearVoronoi ( )
保护

◆ connectEdges()

int cv::Subdiv2D::connectEdges ( int edgeA,
int edgeB )
保护

◆ deleteEdge()

void cv::Subdiv2D::deleteEdge ( int edge)
保护

◆ deletePoint()

void cv::Subdiv2D::deletePoint ( int vtx)
保护

◆ edgeDst()

int cv::Subdiv2D::edgeDst ( int edge,
Point2f * dstpt=0 ) const
Python
cv.Subdiv2D.edgeDst(edge) -> retval, dstpt

返回边的目标点。

参数
edge细分边 ID。
dstpt输出顶点位置。
返回
顶点 ID。

◆ edgeOrg()

int cv::Subdiv2D::edgeOrg ( int edge,
Point2f * orgpt=0 ) const
Python
cv.Subdiv2D.edgeOrg(edge) -> retval, orgpt

返回边的起始点。

参数
edge细分边 ID。
orgpt输出顶点位置。
返回
顶点 ID。

◆ findNearest()

int cv::Subdiv2D::findNearest ( Point2f pt (点),
Point2f * nearestPt=0 )
Python
cv.Subdiv2D.findNearest(pt (点)) -> retval, nearestPt

查找离给定点最近的细分顶点。

参数
pt (点)输入点。
nearestPt输出细分顶点点。

该函数是定位输入点在细分中的另一个函数。它找到最接近输入点的细分顶点。它不一定是包含输入点的区域的顶点之一,尽管用于(使用 locate() 定位的)区域作为起始点。

返回
顶点 ID。

◆ getEdge()

int cv::Subdiv2D::getEdge ( int edge,
int nextEdgeType ) const
Python
cv.Subdiv2D.getEdge(edge, nextEdgeType) -> retval

返回与给定边相关的边之一。

参数
edge细分边 ID。
nextEdgeType指定要返回的与给定边相关的边的参数。可能的值如下:
  • NEXT_AROUND_ORG 边起始点周围的下一条边(如果 e 是输入边,则为图片下方的 eOnext)
  • NEXT_AROUND_DST 边目标点周围的下一条边(eDnext)
  • PREV_AROUND_ORG 边起始点周围的前一条边(反转的 eRnext)
  • PREV_AROUND_DST 边目标点周围的前一条边(反转的 eLnext)
  • NEXT_AROUND_LEFT 左侧区域的下一条边(eLnext)
  • NEXT_AROUND_RIGHT 右侧区域的下一条边(eRnext)
  • PREV_AROUND_LEFT 左侧区域的前一条边(反转的 eOnext)
  • PREV_AROUND_RIGHT 右侧区域的前一条边(反转的 eDnext)
示例输出
返回
与输入边相关的边 ID。

◆ getEdgeList()

void cv::Subdiv2D::getEdgeList ( std::vector< Vec4f > & edgeList) const
Python
cv.Subdiv2D.getEdgeList() -> edgeList

返回所有边的列表。

参数
edgeList输出向量。

函数以一个 4 个数字的向量给出每条边,其中每两个数字代表一条边的顶点。即:org_x = v[0], org_y = v[1], dst_x = v[2], dst_y = v[3]。

◆ getLeadingEdgeList()

void cv::Subdiv2D::getLeadingEdgeList ( std::vector< int > & leadingEdgeList) const
Python
cv.Subdiv2D.getLeadingEdgeList() -> leadingEdgeList

返回与每个三角形相连的起始边 ID 列表。

参数
leadingEdgeList输出向量。

该函数为每个三角形提供一个边 ID。

◆ getTriangleList()

void cv::Subdiv2D::getTriangleList ( std::vector< Vec6f > & triangleList) const
Python
cv.Subdiv2D.getTriangleList() -> triangleList

返回所有三角形的列表。

参数
triangleList输出向量。

该函数以一个 6 个数字的向量给出每个三角形,其中每两个数字代表一个三角形的顶点。即:p1_x = v[0], p1_y = v[1], p2_x = v[2], p2_y = v[3], p3_x = v[4], p3_y = v[5]。

◆ getVertex()

Point2f cv::Subdiv2D::getVertex ( int vertex,
int * firstEdge=0 ) const
Python
cv.Subdiv2D.getVertex(vertex) -> retval, firstEdge

从顶点 ID 返回顶点位置。

参数
vertex顶点 ID。
firstEdge可选。与顶点相连的第一个边 ID。
返回
顶点 (x,y)

◆ getVoronoiFacetList()

void cv::Subdiv2D::getVoronoiFacetList ( const std::vector< int > & idx (索引),
std::vector<std::vector< Point2f > > & facetList,
std::vector< Point2f > & facetCenters )
Python
cv.Subdiv2D.getVoronoiFacetList(idx (索引)) -> facetList, facetCenters

返回所有 Voronoi 面的列表。

参数
idx (索引)要考虑的顶点 ID 向量。对于所有顶点,您可以传递空向量。
facetList输出的 Voronoi 面列表。
facetCenters输出的 Voronoi 面中心点列表。

◆ initDelaunay() [1/2]

void cv::Subdiv2D::initDelaunay ( Rect rect)
Python
cv.Subdiv2D.initDelaunay(rect) -> None
cv.Subdiv2D.initDelaunay2f(rect) -> None

创建一个新的空的 Delaunay 细分。

这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数不同。

参数
rect包含将添加到细分中的所有二维点的矩形。

◆ initDelaunay() [2/2]

void cv::Subdiv2D::initDelaunay ( Rect2f rect)
Python
cv.Subdiv2D.initDelaunay(rect) -> None
cv.Subdiv2D.initDelaunay2f(rect) -> None

创建一个新的空的 Delaunay 细分。

这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数不同。

参数
rect包含将添加到细分中的所有二维点的矩形。

◆ insert() [1/2]

void cv::Subdiv2D::insert ( const std::vector< Point2f > & ptvec)
Python
cv.Subdiv2D.insert(pt (点)) -> retval
cv.Subdiv2D.insert(ptvec) -> None

将多个点插入 Delaunay 三角剖分。

参数
ptvec要插入的点。

该函数将一个点的向量插入到细分中,并相应地修改细分拓扑。

◆ insert() [2/2]

int cv::Subdiv2D::insert ( Point2f pt (点))
Python
cv.Subdiv2D.insert(pt (点)) -> retval
cv.Subdiv2D.insert(ptvec) -> None

将单个点插入 Delaunay 三角剖分。

参数
pt (点)要插入的点。

该函数将单个点插入到细分中,并相应地修改细分拓扑。如果已存在具有相同坐标的点,则不会添加新点。

返回
点的 ID。
注意
如果点在三角剖分指定的矩形外部,则会引发运行时错误。

◆ isRightOf()

int cv::Subdiv2D::isRightOf ( Point2f pt (点),
int edge ) const
保护

◆ locate()

int cv::Subdiv2D::locate ( Point2f pt (点),
int & edge,
int & vertex )
Python
cv.Subdiv2D.locate(pt (点)) -> retval, edge, vertex

返回点在 Delaunay 细分中的位置。

参数
pt (点)要定位的点。
edge输出边,点属于该边或位于其右侧。
vertex可选输出顶点,输入点与该顶点重合。

该函数定位输入点在细分中的位置,并给出三角形的边或顶点之一。

返回
一个整数,指定以下五种点位置情况之一:
  • 点落在某个区域内部。函数返回 PTLOC_INSIDE,edge 将包含该区域的边之一。
  • 点落在一条边上。函数返回 PTLOC_ON_EDGE,edge 将包含该边。
  • 点与细分顶点重合。函数返回 PTLOC_VERTEX,vertex 将包含指向该顶点的指针。
  • 点在细分参考矩形之外。函数返回 PTLOC_OUTSIDE_RECT,并且不填充任何指针。
  • 一个输入参数无效。会引发运行时错误,或者,如果选择了静默或“父”错误处理模式,则返回 PTLOC_ERROR

◆ newEdge()

int cv::Subdiv2D::newEdge ( )
保护

◆ newPoint()

int cv::Subdiv2D::newPoint ( Point2f pt (点),
bool isvirtual,
int firstEdge=0 )
保护

◆ nextEdge()

int cv::Subdiv2D::nextEdge ( int edge) const
Python
cv.Subdiv2D.nextEdge(edge) -> retval

返回边起始点周围的下一条边。

参数
edge细分边 ID。
返回
一个整数,表示边起始点周围的下一条边 ID(如果 e 是输入边,则为图片上方的 eOnext)。

◆ rotateEdge()

int cv::Subdiv2D::rotateEdge ( int edge,
int rotate ) const
Python
cv.Subdiv2D.rotateEdge(edge, rotate) -> retval

返回同一 quad-edge 的另一条边。

参数
edge细分边 ID。
rotate指定要返回的与输入边属于同一 quad-edge 的边的参数。可能的值如下:
  • 0 - 输入边(如果 e 是输入边,则为图片下方的 e)
  • 1 - 旋转后的边(eRot)
  • 2 - 反转的边(反转的 e(绿色))
  • 3 - 反转的旋转后的边(反转的 eRot(绿色))
返回
与输入边属于同一 quad-edge 的边 ID 之一。

◆ setEdgePoints()

void cv::Subdiv2D::setEdgePoints ( int edge,
int orgPt,
int dstPt )
保护

◆ splice()

void cv::Subdiv2D::splice ( int edgeA,
int edgeB )
保护

◆ swapEdges()

void cv::Subdiv2D::swapEdges ( int edge)
保护

◆ symEdge()

int cv::Subdiv2D::symEdge ( int edge) const
Python
cv.Subdiv2D.symEdge(edge) -> retval

成员数据文档

◆ bottomRight

Point2f cv::Subdiv2D::bottomRight
保护

边界矩形的右下角。

◆ freePoint

int cv::Subdiv2D::freePoint
保护

◆ freeQEdge

int cv::Subdiv2D::freeQEdge
保护

◆ qedges

std::vector<QuadEdge> cv::Subdiv2D::qedges
保护

所有的边。

◆ recentEdge

int cv::Subdiv2D::recentEdge
保护

◆ topLeft

Point2f cv::Subdiv2D::topLeft
保护

边界矩形的左上角。

◆ validGeometry

bool cv::Subdiv2D::validGeometry
保护

◆ vtx

std::vector<Vertex> cv::Subdiv2D::vtx
保护

所有的顶点。


该类的文档由以下文件生成: