1,parameterReader()
-
opencv 中的mat,和matlab中的mat数据类型是一样的含义
-
opencv中的CV_32FC1的含义是,openCV 的32位float数据使用通道(channel)1
-
C++ string中的
string str; str.find() //返回查找字符所在的位置数 str.substr(0,4) //获得字符串0-4位置的字符串内容,例如"hello,world",则0-4则为"hell"
-
C++中的 c.str() 和python的一样,讲其他类型转化成C语言字符串类型
-
C++中的ifstream是用来读取整个文件的一个库类。
-
C++在stream流类型中,有一个成员函数good().用来判断当前流的状态是否正常。
-
C++中map的使用,
1 声明一个map容器------- map<string, string> data
2声明一个对应1中类型的map的迭代器 -------map<string, string>::iterator iter
成员函数 含义 begin() 返回指向map头部的迭代器 clear() 删除所有元素 count() 返回指定元素出现的次数 empty() 如果map为空则返回true end() 返回指向map末尾的迭代器 equal_range() 返回特殊条目的迭代器对 erase() 删除一个元素 find() 查找一个元素 insert() 插入元素 max_size() 返回可以容纳的最大元素个数 size() 返回map中元素的个数 swap() 交换两个map get_allocator() 返回map的配置器 key_comp() 返回比较元素key的函数 lower_bound() 返回键值>=给定元素的第一个位置 max_size() 返回可以容纳的最大元素个数 rbegin() 返回一个指向map尾部的逆向迭代器 rend() 返回一个指向map头部的逆向迭代器 upper_bound() 返回键值>给定元素的第一个位置 value_comp() 返回比较元素value的函数 3 插入数据
其中 pair和 make_pair 有first和second域,可以直接访问,
make_paire是返回一个pair<type,type>的数据。
3.1 data[key]=vaule
3.2 data.insert(pair<string, string>(key, value))
3.3 data.insert(make_pair<string, string>(key, value))
4 删除和查找数据
data.find(key) //通过key来查找
data.erase(key) //删除
//或者
data.erase(iter)
如果查找时迭代器的键值不存在,会返回data.end()的值
- C++使用map的迭代器遍历比较方便;
我们都知道可以用下标运算来访问string对象和vector对象。而另外还有一种更通用的方法也可以实现这样的方法-----迭代器(iterator)类似于指针,迭代器也提供了对对象的间接访问。就迭代器而言,其对象是容器中的元素或者string中的字符。使用迭代器可以访问某个元素,迭代器也能从一个元素移动到另外一个元素。迭代器有有效和无效之分,有效的迭代器指向某个元素或者容器中尾元素的下一个位置。其他情况均为无效。
和指针不一样的是,迭代器不是使用取址符,而是使用begin和end成员。
-
openCV mat数据类型指针ptr的使用
mat.ptr(row)[col]
返回的数据类型和一致,通过指针ptr定位(row)[col]位置的数据,该数据的类型要和一致
-
C++中的 atof ( ascii to floating point numbers)函数在<stdlib.h>中,将字符串转化成双精度的浮点数。
1,相机内参矩阵,外参矩阵
内参矩阵:
式(1)中,
和
焦距参数;
和
为主点偏移,相机的主轴是与图像平面垂直切穿过真空的线,与图像平面的交点成为主点,主点偏移就是主点位置相对于图像平面的位置;s为坐标轴倾斜参数,理想情况下为0,即坐标轴不倾斜。
2, dmLocation()
-
openCV中对于图像的放缩使用 resize() 和 cvResize()
//resize函原型 CV_EXPORTS_W void resize( InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR ); //cvResize函数原型 void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );
其中两个函数的src和dst 含义相同,都是指输入图像,输出图像;
参数 interpolation是指差值方法,
可选参数 含义 INTER_LINEAR 双线性差值 (缺省使用) INTER_AREA 区域差值算法,使用象素关系重采样时,图像抽取的首选方法。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 INTER_NEAREST 方法 INTER_CUBIC 立方差值 INTER_NEAREST 最邻近插值算法 INTER_LANCZOS4 Lanczos插值(超过8x8领域的插值算法) INTER_MAX 用于插值的掩模板 WARP_INVERSE_MAP 标志位,反变换 WARP_FILL_OUTLIERS 标志位,用于填充目标图像的像素值,如果其中的一些值对应原图像的异常值,那么这些值讲被设为0
resize()中的 dsize表示放缩后的尺寸,(fx,fy)表示水平方向上的缩放系数和垂直方向上的缩放系数,一般设为0,但是dsize和(fx,fy)不能同时为0。
-
注意opencv中的seize()d的大小尺寸信息是 (列,行)
Size(col, row)
-
opencv中的cvtColor()用于将一个颜色空间转换到另一个颜色空间
void cv::cvtColor(
cv::InputArray src, // 输入序列
cv::OutputArray dst, // 输出序列
int code, // 颜色映射码
int dstCn = 0 // 输出的通道数 (0='automatic')
);
opencv默认的彩色图像的颜色空间是BGR
code | 参数 |
---|---|
RGB和BGR | COLOR_BGR2RGB, COLOR_RGB2BGR, COLOR_RGBA2BGRA, COLOR_BGRA2RGBA |
向RGB和BGR图像中增添alpha通道 | COLOR_RGB2RGBA, COLOR_BGR2BGRA |
从RGB和BGR图像中去除alpha通道 | COLOR_RGBA2RGB, COLOR_BGRA2BGR |
从RBG和BGR颜色空间转换到灰度空间 | COLOR_RGB2GRAY,COLOR_BGR2GRAY,COLOR_RGBA2GRAY,COLOR_BGRA2GRAY |
等,仅列举部分。
为什么要转化到灰度值????
因为算法值关注于其中的一种颜色,因此通过二值化讲图像中的其他色彩调成0,通过设置阈值化(Threshold),进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。