A:
B:
我手头其实有一堆类似于 A的轮廓的素材库,我想做的是用 B轮廓与素材库中的轮廓做比较,匹配一个最相似的轮廓。这里面B轮廓的size明显大于素材库中的轮廓。
6 个解决方案
#2
OpenCV 里有个ShapeContext 比较轮廓的,效果还可以,就是速度慢一些
#3
CSDN博客
 Augusdi
博客专家
OpenCV图像的轮廓的匹配
发表于2013/5/31 15:37:29 15733人阅读
分类: OpenCV
一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮廓和另一个抽象模板.
矩
比较两个轮廓最简洁的方式是比较他们的轮廓矩.这里先简短介绍一个矩的含义.简单的说,矩是通过对轮廓上所有点进行积分运算(或者认为是求和运算)而得到的一个粗略特征.通常,我们如下定义一个轮廓的(p,q)矩:

在公式中p对应x纬度上的矩,q对应y维度上的矩,q对应y维度上的矩,阶数表示对应的部分的指数.该计算是对轮廓边界上所有像素(数目为n)进行求和.如果p和q全为0,那么m00实际上对轮廓边界上点的数目.
下面的函数用于计算这些轮廓矩
void cvContoursMoments(CvSeq* contour,CvMoments* moments)
第一个参数是我们要处理的轮廓,第二个参数是指向一个结构,该结构用于保存生成的结果.CvMonments结构定义如下
/* Spatial and central moments */ typedef struct CvMoments { double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /* spatial moments */ double mu20, mu11, mu02, mu30, mu21, mu12, mu03; /* central moments */ double inv_sqrt_m00; /* m00 != 0 ? 1/sqrt(m00) : 0 */ } CvMoments;
CSDN博客
 Augusdi
博客专家
OpenCV图像的轮廓的匹配
发表于2013/5/31 15:37:29 15733人阅读
分类: OpenCV
一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮廓和另一个抽象模板.
矩
比较两个轮廓最简洁的方式是比较他们的轮廓矩.这里先简短介绍一个矩的含义.简单的说,矩是通过对轮廓上所有点进行积分运算(或者认为是求和运算)而得到的一个粗略特征.通常,我们如下定义一个轮廓的(p,q)矩:

在公式中p对应x纬度上的矩,q对应y维度上的矩,q对应y维度上的矩,阶数表示对应的部分的指数.该计算是对轮廓边界上所有像素(数目为n)进行求和.如果p和q全为0,那么m00实际上对轮廓边界上点的数目.
下面的函数用于计算这些轮廓矩
void cvContoursMoments(CvSeq* contour,CvMoments* moments)
第一个参数是我们要处理的轮廓,第二个参数是指向一个结构,该结构用于保存生成的结果.CvMonments结构定义如下
/* Spatial and central moments */ typedef struct CvMoments { double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /* spatial moments */ double mu20, mu11, mu02, mu30, mu21, mu12, mu03; /* central moments */ double inv_sqrt_m00; /* m00 != 0 ? 1/sqrt(m00) : 0 */ } CvMoments;
#4
@ssbqrm
找了一圈,没发现有这个实现啊,matlab代码倒是不少,不晓得大神你说的是哪个接口
#5
OpenCV3.1.0里有的,参考samples文件里的shape_example.cpp
#6
#1
#2
OpenCV 里有个ShapeContext 比较轮廓的,效果还可以,就是速度慢一些
#3
CSDN博客
 Augusdi
博客专家
OpenCV图像的轮廓的匹配
发表于2013/5/31 15:37:29 15733人阅读
分类: OpenCV
一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮廓和另一个抽象模板.
矩
比较两个轮廓最简洁的方式是比较他们的轮廓矩.这里先简短介绍一个矩的含义.简单的说,矩是通过对轮廓上所有点进行积分运算(或者认为是求和运算)而得到的一个粗略特征.通常,我们如下定义一个轮廓的(p,q)矩:

在公式中p对应x纬度上的矩,q对应y维度上的矩,q对应y维度上的矩,阶数表示对应的部分的指数.该计算是对轮廓边界上所有像素(数目为n)进行求和.如果p和q全为0,那么m00实际上对轮廓边界上点的数目.
下面的函数用于计算这些轮廓矩
void cvContoursMoments(CvSeq* contour,CvMoments* moments)
第一个参数是我们要处理的轮廓,第二个参数是指向一个结构,该结构用于保存生成的结果.CvMonments结构定义如下
/* Spatial and central moments */ typedef struct CvMoments { double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /* spatial moments */ double mu20, mu11, mu02, mu30, mu21, mu12, mu03; /* central moments */ double inv_sqrt_m00; /* m00 != 0 ? 1/sqrt(m00) : 0 */ } CvMoments;
CSDN博客
 Augusdi
博客专家
OpenCV图像的轮廓的匹配
发表于2013/5/31 15:37:29 15733人阅读
分类: OpenCV
一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮廓和另一个抽象模板.
矩
比较两个轮廓最简洁的方式是比较他们的轮廓矩.这里先简短介绍一个矩的含义.简单的说,矩是通过对轮廓上所有点进行积分运算(或者认为是求和运算)而得到的一个粗略特征.通常,我们如下定义一个轮廓的(p,q)矩:

在公式中p对应x纬度上的矩,q对应y维度上的矩,q对应y维度上的矩,阶数表示对应的部分的指数.该计算是对轮廓边界上所有像素(数目为n)进行求和.如果p和q全为0,那么m00实际上对轮廓边界上点的数目.
下面的函数用于计算这些轮廓矩
void cvContoursMoments(CvSeq* contour,CvMoments* moments)
第一个参数是我们要处理的轮廓,第二个参数是指向一个结构,该结构用于保存生成的结果.CvMonments结构定义如下
/* Spatial and central moments */ typedef struct CvMoments { double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /* spatial moments */ double mu20, mu11, mu02, mu30, mu21, mu12, mu03; /* central moments */ double inv_sqrt_m00; /* m00 != 0 ? 1/sqrt(m00) : 0 */ } CvMoments;
#4
@ssbqrm
找了一圈,没发现有这个实现啊,matlab代码倒是不少,不晓得大神你说的是哪个接口
#5
@ssbqrm 找了一圈,没发现有这个实现啊,matlab代码倒是不少,不晓得大神你说的是哪个接口
OpenCV3.1.0里有的,参考samples文件里的shape_example.cpp
#6
@ssbqrm 找了一圈,没发现有这个实现啊,matlab代码倒是不少,不晓得大神你说的是哪个接口
OpenCV3.1.0里有的,参考samples文件里的shape_example.cpp