本科毕业设计
外文翻译
专业名称 自动化
学生学号 2011302111
学生姓名 张恒
指导教师 吴梅
完成时间 2015.4.2
本科毕业设计英文翻译
指导教师评阅意见
算法。
∙ calib3d -基本的多视图几何算法,单,立体摄像机标定,目
标姿态估计,立体匹配算法和三维重建的元素。
∙ features2d -显着的特点探测器,描述符和描述符的匹配。
∙ objdetect -检测的预定义的类对象和实例(例如,脸,眼睛,
杯子,人,汽车,等等)。
∙ 一下HighGUI -一个易于使用的界面,视频采集,图像和视
频编解码器,以及简单的UI 功能。
∙ GPU -从不同的模块OpenCV 的GPU 加速算法。
FLANN 和谷歌测试包装,Python ∙ ...... 其他一些辅助模块,如
绑定,和其他人。
该文件的进一步的章节描述每个模块的功能。但首先,一定要熟悉库中彻底采用的通用API 的概念。
API 的概念:
所有OpenCV 的类和函数被放入CV CV ::说明或使用 命名空间 的简历; 指令:
#包括“opencv2 /核心/ core.hpp” ...... 简历:: 垫 ^ h = CV :: findHomography (points1 , points2 , CV_RANSAC , 5 ); ... 或
#包括“opencv2 /核心/ core.hpp ” 使用 命名空间 的简历; ... 垫 ^ h = findHomography (points1 , points2 , CV_RANSAC , 5 ); ...
一些当前或未来的OpenCV 外部名称可能与STL 或其他图书馆冲突。在这种情况下,使用明确的命名空间符来解析名称冲突:
太 一(100 , 100 , CV_32F ); RANDU (一, 标量:: 所有(1 ), 标量:: 所有(STD :: 兰特())); 品种:: 日志(一, 一); 一 / = STD :: 日志(2 );
自动内存管理
OpenCV 的自动处理所有的记忆。
首先,标准::向量,垫,和使用的函数和方法等数据结构有需要时释放底层的内存缓冲区析构函数。这意味着,析构并不总是解除分配缓冲器中的情况下垫。他们考虑到可能的数据共享。析构函数递减的矩阵数据缓冲区关联的引用计数器。缓冲器被释放,当且仅当参考计数器达到零时,即,当没有其他的结构指的是相同的缓冲液。同样,当一个垫实例被复制,没有实际的数据被真正复制。相反,参考计数器增加记忆有相同的数据的另一所有者。也有垫::克隆创建矩阵数据的完整副本的方法。请参见下面的例子:
//创建一个大的8Mb 矩阵垫 一个(1000 , 1000 , CV_64F ); //创建为同一矩阵的另一头; //这是一个即时操作,无论矩阵规模。垫 B = 一; //创建A 的3次排头的另一个; 没有数据被复制或者垫 Ç = 乙。行(3 ); //现在创建矩阵的单独副本垫 ð = 乙。克隆(); //复制B 的5个行至C ,也就是A 的5个行复制到// A的3次排B 。排(5 )。将copyTo (ç ); //现在让A 和D 共享数据; 经过修改后的版本A 的//由B 和C. 依然引用一个 = ð ; //现在做B 空矩阵(引用没有内存缓冲区),//但是A 的修改后的版本将仍然被引用C ,//尽管C 是原来A 的只是一个单一的排B 。发行(); //最后,使C 的完整副本结果是,大修改//矩阵将被释放,因为它不是由任何人引用Ç = Ç 。克隆();
你看,使用垫等基本结构非常简单。但对于高层次的班级,甚至用户数据
类型,而采取自动内存管理考虑创建?对于他们来说,OpenCV 的提供的Ptr 模板类,类似于标准:: shared_ptr的从C ++ TR1。而是采用普通的指针因此,:
T* PTR = 新 (... );
你可以使用:
PTR PTR = 新 T(... );
也就是说,的Ptr PTR incapsulates一个指向Ť实例,并与指针相关联的引用计数器。看到 的Ptr 说明细节。
自动分配的输出数据
OpenCV 的自动解除分配的存储器,以及自动地分配用于输出功能参数的大部分时间的存储器。所以,如果一个函数具有一个或多个输入阵列(CV ::垫实例)和一些输出阵列,该阵列输出被自动分配或重新分配。输出阵列的大小和类型是由大小和输入阵列的类型确定。如果需要,帮助找出输出数组属性。
例如:
#包括“cv.h ” 的#include“highgui.h ”使用 命名空间 的简历; INT 主(INT , CHAR ** ){
VideoCapture 帽(0 );
如果(!帽。isOpened ()) 返回 - 1 ;
Mat frame , edges ;
namedWindow ( "edges" , 1 );
for (;;)
{
cap >> frame ;
cvtColor ( frame , edges , CV_BGR2GRAY );
GaussianBlur ( edges , edges , Size ( 7 , 7 ), 1.5 , 1.5 ); Canny ( edges , edges , 0 , 30 , 3 );
imshow ( "edges" , edges );
if ( waitKey ( 30 ) >= 0 ) break ;
}
return 0 ; }
阵列帧自动地被分配>>操作者由于视频帧的分辨率和比特深度是已知的视频捕捉模块。该阵列的边缘是由自动分配cvtColor 功能。它具有相同的大小和位深度作为输入数组。信道的数量是1,因为颜色转换代码CV_BGR2GRAY被传递,这意味着一个颜色灰度级转换。注意,帧和边缘被循环体的第一次执行期间分配一次,因为所有的下一个视频帧具有相同的分辨率。如果你以某种方式更改视频分辨率,阵列会自动重新分配。
这种技术的关键元件是垫:创建方法。它需要所需阵列的尺寸和类型。如果数组已经有指定的尺寸和类型,方法不执行任何操作。否则,它会释放先前分配的数据,如果有的话(这部分涉及递减基准计数器,并将其与零进行比较),然后分配所需尺寸的一个新的缓冲区。大多数功能调用垫::创建为每个输出阵列的方法,并且因此自动输出数据的分配被执行。
从这个计划中的一些明显的例外是CV :: mixChannels ,CV :: RNG ::填充,和其他一些功能和方法。他们不能够分配输出数组,所以你必须要做到这一点提前。
饱和算术
也可以简化绑定其它语言,如Python ,爪哇,Matlab 的不具有在所有模板或具有有限的模板的能力的发展,目前的OpenCV 的实现是基于多态性和运行调度以上模板。在那些地方,运行时调度会太慢(如像素接入运营商),是不可能的(通用的Ptr 实施),或只是非常不方便(saturate_cast ())当前实现引入小模板类,方法和功能。别处在当前的OpenCV 版本使用模板是有限的。
因此,存在一个有限固定组原始数据类型库可以操作上的。也就是说,阵元应具有以下类型之一:
∙ 8位无符号整数(UCHAR )
∙ 8位有符号整数(SCHAR )
∙ 16位无符号整数(USHORT )
∙ 16位有符号整数(短)
∙ 32位有符号整数(INT )
∙ 32位浮点数(浮点)
∙ 64位浮点数(双)
∙ 多个元素,其中所有的元件具有相同的类型(上述的1)的
一个元组。其元素是这样的元组的阵列,被称为多通道阵
列,相反的单通道的数组,其元素是标量值。通道的最大
可能的数目是由所定义CV_CN_MAX常数,这是目前设置为
512。
对于这些基本类型,下列枚举施加:
枚举 { CV_8U = 0 , CV_8S = 1 , CV_16U = 2 , CV_16S = 3 , CV_32S = 4 , CV_32F = 5 , CV_64F = 6 };
多通道(Ñ声道)类型可以使用以下选项来指定:
∙ CV_8UC1 ... CV_64FC4常数(对于一个信道数目从1到4)
说明:
所有材料统一使用A4纸张复印或打印,并按下列顺序装订:
1、封面(打印)
2、指导教师评阅意见(手写)
3、翻译材料(打印)
4、外文原文(2000~3000词,复印或打印)