OpenCV——轮廓特征描述
检测出特定轮廓,可进一步对其特征进行描述,从而识别物体。
1. 如下函数,可以将轮廓以多种形式包围起来。
// 轮廓表示为一个矩形
Rect r = boundingRect(Mat(contours[]));
rectangle(result, r, Scalar(), );
// 轮廓表示为一个圆
float radius;
Point2f center;
minEnclosingCircle(Mat(contours[]), center, radius);
circle(result, Point(center), static_cast<int>(radius), Scalar(), );
// 轮廓表示为一个多边形
vector<Point> poly;
approxPolyDP(Mat(contours[]), poly, , true);
vector<Point>::const_iterator itp = poly.begin();
while (itp != (poly.end() - ))
{
line(result, *itp, *(itp + ), Scalar(), );
++itp;
}
line(result, *itp, *(poly.begin()), Scalar(), );
// 轮廓表示为凸多边形
vector<Point> hull;
convexHull(Mat(contours[]), hull);
vector<Point>::const_iterator ith = hull.begin();
while (ith != (hull.end() - ))
{
line(result, *ith, *(ith + ), Scalar(), );
++ith;
}
line(result, *ith, *(hull.begin()), Scalar(), );
2. 将轮廓数据存储在记事本中,然后读取数据,存入vector<cv::Point>中
void readFromTxt(string name,int q)
{
ifstream file(name);
int i = ;
while (file) {
string line;
getline(file, line);
if (line == "")break;
cv::Point p;
int num;
for (int i = ;; i++)
{
if (line[i] == ';') {
num = i + ;
break;
}
}
int x = , y = ;
int k;
for (int i = ; i < num; i++) {
if (line[i] == ',') {
k = i;
for (int j = ; j < k; j++)
{
x += (line[j] - '') * (pow(, k - j - ));
}
}
if (line[i] == ';') {
for (int j = k + ; j < i; j++) {
y += (line[j] - '') * (pow(, i - j - ));
}
}
}
p.x = x;
p.y = y;
if(q == )shitou.push_back(p);
else if (q == )jiandao.push_back(p);
else bu.push_back(p);
}
}
其中每行的存取格式为:
, ;
, ;
, ;
3. 使用mathShapes函数比较两个形状的相似度
函数返回值 为 相似度大小,完全相同的图像返回值是0。对于第一种比较方法来说返回值最大是1。
double cvMatchShapes( const void* object1, const void* object2,
int method, double parameter= ); 参数含义
object1——第一个轮廓或灰度图像
object2——第二个轮廓或灰度图像
method——比较方法:
CV_CONTOURS_MATCH_I1
CV_CONTOURS_MATCH_I2
CV_CONTOURS_MATCH_I3.
parameter——比较方法的参数
4. 判断某点是否在轮廓内
double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)
contour——输入轮廓
pt ——要测试的点
measureDist ——为真则计算点到最近轮廓的整数距离,
否则,只判断点的位置。返回值+1(在轮廓里面)、-1(在轮廓外面)、0(在轮廓上)。
参考:http://mobile.51cto.com/aengine-435442.htm
OpenCV——轮廓特征描述的更多相关文章
- OpenCV特征描述
		特征描述 目标 在本教程中,我们将涉及: 使用 DescriptorExtractor 接口来寻找关键点对应的特征向量. 特别地: 使用 SurfDescriptorExtractor 以及它的函数 ... 
- OpenCV 特征描述
		#include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp" #inclu ... 
- DoG 、Laplacian、图像金字塔详解
		DoG(Difference of Gaussian) DoG (Difference of Gaussian)是灰度图像增强和角点检测的方法,其做法较简单,证明较复杂,具体讲解如下: Differe ... 
- 第一篇 特征提取以及openvslam中的相关实现详解
		参考尺度空间理论 金字塔 当用一个机器视觉系统分析未知场景时,计算机没有办法预先知道图像中物体尺度,因此,我们需要同时考虑图像在多尺度下的描述,获知感兴趣物体的最佳尺度.所以在很多时候,我们会在将图像 ... 
- opencv2.4.13+python2.7学习笔记--OpenCV中的图像处理--图像轮廓特征和几何矩
		阅读对象:对概率论中的期望有一点了解. 1.图像几何矩 1.1简述 图像的几何矩包括空间矩.中心矩和中心归一化矩.几何矩具有平移.旋转和尺度不变性,一般是用来做大粒度的区分,用来过滤显然不相关的图像. ... 
- OpenCV成长之路(8):直线、轮廓的提取与描述
		基于内容的图像分析的重点是提取出图像中具有代表性的特征,而线条.轮廓.块往往是最能体现特征的几个元素,这篇文章就针对于这几个重要的图像特征,研究它们在OpenCV中的用法,以及做一些简单的基础应用. ... 
- OpenCV成长之路:直线、轮廓的提取与描述
		http://ronny.blog.51cto.com/8801997/1394139 OpenCV成长之路:直线.轮廓的提取与描述 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ... 
- [OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (一)
		部分 V图像特征提取与描述 OpenCV-Python 中文教程(搬运)目录 29 理解图像特征 目标本节我会试着帮你理解什么是图像特征,为什么图像特征很重要,为什么角点很重要等.29.1 解释 我相 ... 
- [OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (二)
		部分 V图像特征提取与描述 OpenCV-Python 中文教程(搬运)目录 34 角点检测的 FAST 算法 目标 • 理解 FAST 算法的基础 • 使用 OpenCV 中的 FAST 算法相关函 ... 
随机推荐
- e864. 取的显示器大小尺寸
			See also e670 缓冲图像转换为图像. try { Robot robot = new Robot(); // Capture a particular area on the screen ... 
- Eclipse使用资源管理器打开选中文件/目录
- eclipse中svn提交报错的解决
- erlang 二进制中  拼接   变量或者函数  报错
			aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVsAAACiCAIAAABgR/nfAAAM5ElEQVR4nO2dzZrcKBJF9Zjd/tnOdN 
- Linux 系统强制踢掉登录用户并禁止用户再次登录系统
			标注:创建一个test测试用户,test用户使用Xshel工具ssh远程登录linux操作系统. 强制踢掉登录用户方法一: [root@cloucentos6 ~]# w ... 
- PolymiRTS 数据库- miRNA SNP数据库
			背景: miRNA通过和mRNA的3'UTR区结合,导致mRNA讲解或者抑制mRNA翻译,从而实现转录后调控的作用: 如果在miRNA和 mRNA的结合区域,发生了snp,就可能会影响miRNA和mR ... 
- Gateway/Worker模型 数据库使用示例
			From: http://www.bubuko.com/infodetail-777418.html 1.数据库配置Applications/XXX/Config/Db.php <?php na ... 
- CSS3与动画有关的属性transition、animation、transform对比
			最近应公司需求,需要用css3做动画,终于把以前一直傻傻分不清楚的三个属性理解了. 索性在这里进行一个简单的对比,加深自己的记忆. 浏览器兼容性 CSS3 transform 属性 Internet ... 
- UGUI之不规则按钮的响应区域
			比如一些不规则按钮最好可以设置它的响应区域.如下图所示,用Polygon Collider2D组件圈出精灵响应事件的区域. 注意 IsRaycastLocationValid 的判断区域是RectTr ... 
- unity之UGUI屏幕分辨率調整
			1.Canvas的屬性配置: 2.Canvas Scaler的屬性配置: 3.根據不同的屏幕比例動態寫改碩放基準: public float standard_width = 800f; //初始宽度 ... 
