OpenCV 4.11.0
开源计算机视觉
加载中…
搜索中…
无匹配项
cv::Subdiv2D 类参考

#include <opencv2/imgproc.hpp>

cv::Subdiv2D 的协作图

结构体 QuadEdge
 
结构体 Vertex
 

公共类型

枚举 {
  PTLOC_ERROR = -2 ,
  PTLOC_OUTSIDE_RECT = -1 ,
  PTLOC_INSIDE = 0 ,
  PTLOC_VERTEX = 1 ,
  PTLOC_ON_EDGE = 2
}
 
枚举 {
  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)
 
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 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
 返回相同四边形的另一条边。
 
int symEdge (int edge) const
 

保护成员函数

void calcVoronoi ()
 
void checkSubdiv () const
 
void clearVoronoi ()
 
int connectEdges (int edgeA, int edgeB)
 
void deleteEdge (int edge)
 
void deletePoint (int vtx)
 
int isRightOf (Point2f pt, int edge) const
 
int newEdge ()
 
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 freePoint
 
int freeQEdge
 
std::vector< QuadEdgeqedges
 所有边。
 
int recentEdge
 
Point2f topLeft
 边界矩形的左上角。
 
bool validGeometry
 
std::vector< Vertexvtx
 所有顶点。
 

成员枚举文档

◆ 匿名枚举

匿名枚举

Subdiv2D 点位置情况

枚举器
PTLOC_ERROR 

点位置错误。

PTLOC_OUTSIDE_RECT 

点位于细分边界矩形之外。

PTLOC_INSIDE 

点位于某个面的内部。

PTLOC_VERTEX 

点与细分顶点之一重合。

PTLOC_ON_EDGE 

点位于某条边上。

◆ 匿名枚举

匿名枚举

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

枚举器
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/2]

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

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

◆ Subdiv2D() [2/2]

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

这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅在于它接受的参数。

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

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

成员函数文档

◆ calcVoronoi()

void cv::Subdiv2D::calcVoronoi ( )
protected

◆ checkSubdiv()

void cv::Subdiv2D::checkSubdiv ( ) const
protected

◆ clearVoronoi()

void cv::Subdiv2D::clearVoronoi ( )
protected

◆ connectEdges()

int cv::Subdiv2D::connectEdges ( int edgeA,
int edgeB )
protected

◆ deleteEdge()

void cv::Subdiv2D::deleteEdge ( int edge)
protected

◆ deletePoint()

void cv::Subdiv2D::deletePoint ( int vtx)
protected

◆ 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 向量。对于所有顶点,可以传递空向量。
facetListVoronoi 面片的输出向量。
facetCentersVoronoi 面片中心点的输出向量。

◆ initDelaunay()

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

创建一个新的空 Delaunay 细分。

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

◆ insert() [1/2]

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

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

参数
ptvec要插入的点。

该函数将点向量插入细分中,并相应地修改细分拓扑结构。

◆ insert() [2/2]

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

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

参数
pt要插入的点。

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

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

◆ isRightOf()

int cv::Subdiv2D::isRightOf ( Point2f pt,
int edge ) const
protected

◆ 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 ( )
protected

◆ newPoint()

int cv::Subdiv2D::newPoint ( Point2f pt,
bool isvirtual,
int firstEdge = 0 )
protected

◆ 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

返回相同四边形的另一条边。

参数
edge细分边ID。
rotate指定要返回与输入边相同的四边形边的参数。可能的取值如下:
  • 0 - 输入边(如果 e 是输入边,则在下图中为 e)
  • 1 - 旋转边 (eRot)
  • 2 - 反向边(反向 e(绿色))
  • 3 - 反向旋转边(反向 eRot(绿色))
返回值
与输入边相同的四边形边之一的 ID。

◆ setEdgePoints()

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

◆ splice()

void cv::Subdiv2D::splice ( int edgeA,
int edgeB )
protected

◆ swapEdges()

void cv::Subdiv2D::swapEdges ( int edge)
protected

◆ symEdge()

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

成员数据文档

◆ bottomRight

Point2f cv::Subdiv2D::bottomRight
protected

边界矩形的右下角。

◆ freePoint

int cv::Subdiv2D::freePoint
protected

◆ freeQEdge

int cv::Subdiv2D::freeQEdge
protected

◆ qedges

std::vector<QuadEdge> cv::Subdiv2D::qedges
protected

所有边。

◆ recentEdge

int cv::Subdiv2D::recentEdge
protected

◆ topLeft

Point2f cv::Subdiv2D::topLeft
protected

边界矩形的左上角。

◆ validGeometry

bool cv::Subdiv2D::validGeometry
protected

◆ vtx

std::vector<Vertex> cv::Subdiv2D::vtx
protected

所有顶点。


此类的文档是从以下文件生成的: