”……“ was not declared in this scope。。。当出现这种问题的时候,一般是头文件不对,查一下你库存放的位置,版本不同 #include 后面写的都不同的
1、意思就是 64位和32位的不兼容。 2、不知道你想表达的是什么意思。 3、是的。 4、DEBUG的程序一般可以调试,release一般无法调试,并且经过优化算法。由于优化算法不同,甚至导致DEBUG的程序和release程序运行结果不一样的情况
OpenCV训练分类器
一、简介
目标检测方法最初由Paul Viola [Viola01]提出,并由Rainer Lienhart [Lienhart02]对这一方法进行了改善。
该方法的基本步骤为:
首先,利用样本(大约几百幅样本)的 harr 特征进行分类器训练,得到一个级联的boosted分类器。
分类器中的"级联"是指最终的分类器是由几个简单分类器级联组成。在图像检测中,被检窗口依次通过每一级分类器, 这样在前面几层的检测中大部分的候选区域就被排除了,全部通过每一级分类器检测的区域即为目标区域。
分类器训练完以后,就可以应用于输入图像中的感兴趣区域(与训练样本相同的尺寸)的检测。检测到目标区域(汽车或人脸)分类器输出为1,否则输出为0。为了检测整副图像,可以在图像中移动搜索窗口,检测每一个位置来确定可能的目标。为了搜索不同大小的目标物体,分类器被设计为可以进行尺寸改变,这样比改变待检图像的尺寸大小更为有效。所以,为了在图像中检测未知大小的目标物体,扫描程序通常需要用不同比例大小的搜索窗口对进行几次扫描。
目前支持这种分类器的boosting技术有四种:
Discrete Adaboost, Real Adaboost, Gentle Adaboost and Logitboost。
"boosted" 即指级联分类器的每一层都可以从中选取一个boosting算法(权重投票),并利用基础分类器的自我训练得到。
根据上面的分析,目标检测分为三个步骤:
1、 样本的创建
2、 训练分类器
3、 利用训练好的分类器进行目标检测。
二、样本创建
训练样本分为正例样本和反例样本,其中正例样本是指待检目标样本(例如人脸或汽车等),反例样本指其它任意,所有的样本都被归一化为同样的尺寸大小(例如,20x20)。
负样本
负样本可以来自于任意的,但这些不能包含目标特征。负样本由背景描述文件来描述。背景描述文件是一个文本文件,每一行包含了一个负样本的文件名(基于描述文件的相对路径)。该文件必须手工创建。
eg: 负样本描述文件的一个例子:
假定目录结构如下:
/img
img1jpg
img2jpg
bgtxt
则背景描述文件bgtxt的内容为:
img/img1jpg
img/img2jpg
正样本
正样本由程序craatesample程序来创建。该程序的源代码由OpenCV给出,并且在bin目录下包含了这个可执行的程序。
正样本可以由单个的目标或者一系列的事先标记好的来创建。
Createsamples程序的命令行参数:
命令行参数:
-vec <vec_file_name>
训练好的正样本的输出文件名。
-img<image_file_name>
源目标(例如:一个公司图标)
-bg<background_file_name>
背景描述文件。
-num<number_of_samples>
要产生的正样本的数量,和正样本数目相同。
-bgcolor<background_color>
背景色(假定当前为灰度图)。背景色制定了透明色。对于压缩,颜色方差量由bgthresh参数来指定。则在bgcolor-bgthresh和bgcolor+bgthresh中间的像素被认为是透明的。
-bgthresh<background_color_threshold>
-inv
如果指定,颜色会反色
-randinv
如果指定,颜色会任意反色
-maxidev<max_intensity_deviation>
背景色最大的偏离度。
-maxangel<max_x_rotation_angle>
-maxangle<max_y_rotation_angle>,
-maxzangle<max_x_rotation_angle>
最大旋转角度,以弧度为单位。
-show
如果指定,每个样本会被显示出来,按下"esc"会关闭这一开关,即不显示样本,而创建过程继续。这是个有用的debug选项。
-w<sample_width>
输出样本的宽度(以像素为单位)
-h《sample_height》
输出样本的高度,以像素为单位。
注:正样本也可以从一个预先标记好的图像集合中获取。这个集合由一个文本文件来描述,类似于背景描述文件。每一个文本行对应一个。每行的第一个元素是文件名,第二个元素是对象实体的个数。后面紧跟着的是与之匹配的矩形框(x, y, 宽度,高度)。
int main(int argc,char argv) //main函数
{
cvNamedWindow("Demo");//声明窗口
CvCapture capture=cvCreateCameraCapture(0);//声明摄像头类型的变量
IplImage frame;//声明图像
while(1)//循环
{
frame=cvQueryFrame(capture);//从摄像头中读取一帧
if(!frame) break;//如果错误,跳出循环
cvShowImage("Demo",frame);//在窗口中显示图像
char c=cvWaitKey(50);//等待按键事件
if(c==27) break;//如果按ESC键,跳出循环
}
cvReleaseCapture(&capture);//释放capture
cvDestroyWindow("Demo");//销掉窗口
}
OpenCV是一个开源的图像处理库,QML是Qt官方推出的一个描述性语言,QtMarkupLanguage,QtQuick也是Qt官方推出的一个技术框架,在开发嵌入式、动态触屏等时有一定的优势。
模块的作用:
打一个很简单的比方,QML就是Qt的HTML,C就是Qt的JavaScript,而QtQuick相当于一些已经集成好的开发框架,使开发应用程序变得更加简单省事。
OpenCV是一个基于C/C的开源图像处理库,和Qt本身没有太多关联,其主要是用于计算机视觉和图形开发,Qt的扩展应用OpenCV并不是每个应用程序都要用到,只是某些有特殊需求的应用程序可以更方便地使用Qt扩展的OpenCV应用。比如说用Qt开发一个软件,要使用人脸识别功能,就可以集成OpenCV来实现。
使用频率:
虽然说QML相当于HTML,C相当于JavaScript,但是还是有一定区别:所有的网页都是通过解析HTML渲染出的,JavaScript虽然可以动态改变网页,但是最终还是通过改变HTML来达到效果;QML、C的关系恰好反过来,在Qt中,C是“更加底层”的,QML使用更加简单的标记语言的语法来调用底层的C绘图支持API,从而提高程序开发的效率。
使用QML可以更快速、简捷地开发应用程序,在Qt中的使用频率也是很高的,不过这要根据特定开发人群、开发目标而定。有些开发者习惯直接使用C开发,而有些开发者更喜欢简单的QML,很多时候都是“用QML开发用户界面,用C开发业务逻辑”,但是用C开发用户界面的也不在少数。
QtQuick是一套开发框架,核心语言就是QML。
QtQuick的使用频率不低,从Qt的NewProject界面就可以看出,QtQuick是和Qt传统的CWidge平起平坐的(当然还有QtforPython等)。
OpenCV在不需要图形处理功能的情况下是不需要用到的,所以不怎么好说“使用频率”,因为这是针对特定的软件需求来的。
是否有必要学习:
QtQuick能够使应用程序开发更有效率,但是并不是开发一个程序必备的,能用QtQuick开发的,C肯定能够做出来,但是耗费时间、精力更多。在Qt开发工作这一块,掌握Qt的核心功能是必须的,而且这还远远不够。在招聘的时候肯定是考察应聘者对Qt各种技术和开发思想的理解和掌握情况,而QtQuick是官方推出的框架,掌握其开发方法应该是基本功。
以上就是关于linux环境中如何运行第一个opencv程序,我环境配置好了,就是运行的时候提示有错。如能解决,另外加分全部的内容,包括:linux环境中如何运行第一个opencv程序,我环境配置好了,就是运行的时候提示有错。如能解决,另外加分、怎样编译opencv程序、如何利用opencv进行样本训练等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)