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 算法相关函 ...
随机推荐
- e828. 创建JTabbedPane
A tabbed pane is a container that displays only one child component at a time. Typically, the childr ...
- 使用Camera功能 AREA的理解
转至 http://blog.csdn.net/think_soft/article/details/7998478 使用Camera功能 大多数的Camera功能都是使用Camera.Paramet ...
- VMware克隆虚拟机后无法启动网卡
最简单的办法: 修改这个文件:/etc/udev/rules.d/70_persistent-net.rules 把eth1修改为eth0,记下里面的mac地址 修改/etc/sysconfig/ne ...
- http.sys的简单应用
//public void Run() //{ // //httpListener提供一个简单,可通过编程方式控制的Http协议侦听器.此类不能被继承. // if (!HttpListener.Is ...
- [转]MBProgressHUD 源码分析
源码来源: https://github.com/jdg/MBProgressHUD 版本:0.9.1 MBProgressHUD是一个显示HUD窗口的第三方类库,用于在执行一些后台任务时,在程序中显 ...
- Oracle高级查询之CONNECT BY
为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. Oracle中的select语句可以用start with ... connect by prior ...子句实现递 ...
- Node.js 模块之 morgan中间件记录日志
NodeJs中Express框架使用morgan中间件记录日志 Express中的app.js文件已经默认引入了该中间件var logger = require('morgan'); 使用app.us ...
- JWT全面解读、使用步骤
JWT全面解读JWT全面解读前言JWT基本使用在pom.xml引入java-jwt示例如下概念介绍JWT消息构成头部playload标准中注册的声明 (建议但不强制使用)自定义数据签名signatur ...
- 安装unity3d多个版本共存
转自:https://www.cnblogs.com/xsgame/p/3549486.html 用4.3打开两个低版本的unity工程,都报错.... 用低版本打开正常,希望Unity3D版本兼容性 ...
- Unity三消算法
消除算法图文详解 三消算法首要实现的就是找到所有三个或三个以上的可消除对象,但直接找到这些对象是不太现实的,所以我们要将需求拆分.可不可以先获取所有图案相连的对象,进而在获取三消对象,这个算法也是众多 ...