小错误:
1、不要错用标识符当变量(如:threshold)
2、显示图像的窗口名,跟踪条名尽量用英文,低版本的不兼容中文(2.4以上的兼容)。
数据类型
请参考:https://blog.csdn.net/u010368556/article/details/79179669
vector:
<1>解释:容器,可以存放各种类型的对象,是一个动态数组,存放各种类型的数据;
注意:如果要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低;
<2>方式:
vector<Point2f> ----用于存放float类型的数据,这里是二维点向量,也可以将Point2f换成int等其他类型;
vector<Point2i> ----用于存放int类型的数据;
vector<Point2d> ----用于存放double类型的数据;
vector<vector<Point2f>> points;----表示定义一个二维数组,
其中的points[0].size(),表示第一行的列数;
<3>基础知道:
(1)头文件#include<vector>;
(2)创建vector对象,vector<int> vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
(5)使用迭代器访问元素:
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
(6)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
(7)删除元素:
vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(8)向量大小:vec.size();
(9)清空:vec.clear();
(10)begin()与end()函数表示开始第一个和最后一个;
front()与back()表示从前开始和从后开始;
<4>简单用法:(1)vecor<int> data;表示创建了一个vector数组,int为数组元素的数据类型,data为动态数组名;
(2)data.push_back(m);在data中存入数据m,m可以为单数字、数组:如(2,3)、指针、地址等,并且从data[0]开始存放,依次往后存放
例如:data.push_back(23);data.push_back(45); ------则:data[0]=23;data[1]=45;
(3)data.pop_back(m);在data中高效的移除vector中最后一个数据,m可以为单数字、数组:如(2,3)、指针、地址、结构体等,并且从最后一个开始移除,依次移除;
(4)Vector作为函数的参数或者返回值时,需要注意其中的“&”绝对不能少:
double Distance(vector<int>&a, vector<int>&b) !!!
<5>复杂用法: (注:需要头文件#include<algorithm>)
(1)reverse----将元素翻转;
reverse(vec.begin(),vec.end());将元素翻转,即逆序排列!
(2)sort----排序;
sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).
可以通过重写排序比较函数按照降序比较,如下:
bool Comp(const int &a,const int &b)//定义排序比较函数:
{return a>b;}
调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。
(3)insert()----插入;函数有以下三种用法:
a.在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器
b.在指定位置loc前插入num个值为val的元素
c.在指定位置loc前插入区间[start, end)的所有元素
(4)Vector中元素的输入输出 :http://blog.csdn.net/duan19920101/article/details/50617190
Matx类和Vec类:https://blog.csdn.net/qq_37871032/article/details/69487334
参考:https://blog.csdn.net/ubunfans/article/details/24421981
数据处理(浮点型转换为整型)
参考:https://blog.csdn.net/u013829933/article/details/50471227