std::vector <cv::Point> VectorPoints

说明:首先定义一个Point(即Point2i---二维整型的点)类型的变量VectorPoints,这就是我们创建的用来存储Point类型的点的容器啦。<cv::Point>表示容器中所装的数据的类型,double啊,int啊,各种都可以。之后,博主用二重循环给我们的容器装数据:定义一个我们要装的数据的类型的变量(这里叫myPoint),给这个变量赋值,然后调用vector变量的push_back函数(参数即为该类型数据)。我们就把这些数据装入容器了。

#include <iostream>
#include <string>
#include <vector>
#include "opencv2/highgui/highgui.hpp" int main()
{ int i, j;
std::vector <cv::Point> VectorPoints;
for (i = 0; i<5; i++)
for (j = 0; j<5; j++)
{
cv::Point myPoint = cv::Point(i, j);
VectorPoints.push_back(myPoint);
} for (i = 0; i<VectorPoints.size(); i++)
std::cout << VectorPoints.at(i) << std::endl;
system("pause");
return 0;
}

我们可以用cout输出数据来看看。用at我们可以轻易地访问容器中的第i个元素(数据)。VectorPoints.at(i)有两个变量x,y即为我们刚才复制的i,j。VectorPoints.at(i).x和VectorPoints.at(i).y直接可以得到某个Point类型数据的x、y元素。

函数的具体使用可参考:

https://zhuanlan.zhihu.com/p/45208774

https://blog.csdn.net/msdnwolaile/article/details/52708144

说明:在OpenCV的绘制特征点和匹配点绘制及连线中,都反复地使用了KeyPoint这种数据类型,因此首先定义一个数据类型为KeyPoint的vector容器,名之keypoint_test。接着,我们给容器装数据:KeyPoint比之Pont多了些参数,头两个参数分别是float型,第三个是绘制点的大小,再后就都是用的默认参数,博主还没有深究,是对着下边的features2d.hpp中的东西对着打的(后四个参数:-1,0 ,0,-1)。之后,如法炮制地调用函数push_back,我们就得到了装载了数据的vector容器keypoint_test。接下来的绘制就简单了。Mat型变量读取图像,再定义一个Mat性变量mat_show用于绘制。最后调用drawKeypoints,参数分别是:原始图像,待绘制的数据keypoint_test,绘制所用的图像,任意颜色,ID号(同一幅图像相同)。这样简单几步就大功告成啦。;

opencv3.x.的cv2.drawKeypoints()函数主要五个参数:

image:也就是原始图片
keypoints:从原图中获得的关键点,这也是画图时所用到的数据
outputimage:输出              //可以是原始图片 
color:颜色设置,通过修改(b,g,r)的值,更改画笔的颜色,b=蓝色,g=绿色,r=红色。
flags:绘图功能的标识设置
flags的四个参数:

cv2.DRAW_MATCHES_FLAGS_DEFAULT:创建输出图像矩阵,使用现存的输出图像绘制匹配对和特征点,对每一个关键点只绘制中间点

cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:不创建输出图像矩阵,而是在输出图像上绘制匹配对

cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:对每一个特征点绘制带大小和方向的关键点图形

cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS:单点的特征点不被绘制

#include <iostream>
#include <string>
#include <vector>
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/core/core.hpp>
#include <opencv2/xfeatures2d.hpp>
#include <opencv2/xfeatures2d/nonfree.hpp> using namespace cv;
using namespace std; int main()
{ vector<KeyPoint> keypoint_test;
KeyPoint mykeypoint = KeyPoint(, , , -, , , -);
keypoint_test.push_back(mykeypoint);
mykeypoint = KeyPoint(, , , -, , , -);
keypoint_test.push_back(mykeypoint);
mykeypoint = KeyPoint(, , , -, , , -);
keypoint_test.push_back(mykeypoint);
Mat mat_test = imread("E:\\VS2015Opencv\\vs2015\\project\\picture\\04.png");
Mat mat_show;
drawKeypoints(mat_test, keypoint_test, mat_show, Scalar::all(-), );
imshow("show", mat_test);
imshow("show2", mat_show); waitKey();
return ;
}

c++中vector函数的更多相关文章

  1. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  2. C++ STL中vector(向量容器)使用简单介绍

    原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...

  3. OpenCV图像处理中常用函数汇总(1)

    //俗话说:好记性不如烂笔头 //用到opencv 中的函数时往往会一时记不起这个函数的具体参数怎么设置,故在此将常用函数做一汇总: Mat srcImage = imread("C:/Us ...

  4. [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:  C++ Code  1 2   template < class _Ty, cl ...

  5. matlab 中max函数用法

    Matlab中max函数在矩阵中求函数大小的实例如下:(1)C = max(A)返回一个数组各不同维中的最大元素.如果A是一个向量,max(A)返回A中的最大元素.如果A是一个矩阵,max(A)将A的 ...

  6. 关于C++中vector和set使用sort方法进行排序

    C++中vector和set都是非常方便的容器, sort方法是algorithm头文件里的一个标准函数,能进行高效的排序,默认是按元素从小到大排序 将sort方法用到vector和set中能实现多种 ...

  7. STL中vector、list、deque和map的区别

    1 vector     向量 相当于一个数组    在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...

  8. 【转】STL中vector、list、deque和map的区别

    1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...

  9. 牛客训练六:海啸(二维树状数组+vector函数的使用)

    题目链接:传送门 思路: 二维树状数组, vector(first,last)函数中assign函数相当于将first中的函数清空,然后将last中的值赋值给first. 参考文章:传送门 #incl ...

随机推荐

  1. html基本标签表单实现交互原理,单选框,复选框,下拉框介绍

    表单是什么?表单是前端和服务器做交互的一种机制,表单收集用户输入信息,之后发送或者提交给服务器.用户在输入的信息称之为内容,内容的文本分为普通和密码型,用户通过单选框.复选框.下拉框(也就是下拉菜单) ...

  2. CommonJs模块化(nodejs模块规范)

    1.概述: Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文件不可见. 如果想在多个 ...

  3. ajax请求携带cookie和自定义请求头header

    参考链接:https://blog.csdn.net/menghuanzhiming/article/details/102736312

  4. C#设计模式学习笔记:(4)建造者模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7614630.html,记录一下学习过程以备后续查用. 一.引言 在现实生活中,我们经常会遇到一些构成比较复杂 ...

  5. [P5748] 集合划分计数 - 生成函数,NTT

    求 \(10^5\) 以内的所有贝尔数:将 \(n\) 个有标号的球划分为若干非空集合的方案数 Solution 非空集合的指数生成函数为 \(F(x)=e^x-1\) 枚举一共用多少个集合,答案就是 ...

  6. kafka消费服务调优

    1.消费服务速度跟不上 2.top -H 观察是哪个线程最忙 3.多次使用jstack,看看最忙的那个线程在做什么

  7. HTML5 canvas绘图基础(电子名片生成器源码)

    创建canvas <canvas id="myCanvas" class="canvas"> 您的浏览器不支持canvas </canvas& ...

  8. Jquery开发电商网站实战(带源码)

    组件化思想,包含: 下拉菜单项封装 + 按需加载 搜索功能组件化,显示数据 + 下拉显示 + 缓存 分类导航按需加载 幻灯片效果组件封装及按需加载 商品楼层模块组件化 + 商品数据按需加载 + Tab ...

  9. mac 中 端口占用

    1.   sudo lsof -i :5001 2.   sudo kill -9 PID

  10. python之路(集合,深浅copy,基础数据补充)

    一.集合:类似列表,元组的存储数据容器,不同点是不可修改,不可重复.无序排列. 1.创建集合: (1).set1 = {'abby', 'eric'} result:{'eric', 'abby'} ...