发布时间:
,cv_window_autosize);//制造一个窗口cvmovewindow("win1",100,100);//定位一个窗口cvshowimage("win1&q
2010虎年运势测算,走好运,发大财!opencv进修笔记 march 12, 2010 1.关于数据根基类型的进修参见代码: //,demo 1opencv的第一个例子 //author:liuchang #include <cv.h> #include <iostream> using namespace std; int main() { cvpoint p = cvpoint(1,3);//针对整型的类型cvpoint,对应有函数cvpoint,贯注大大写 cout << p.x << " " << p.y << endl; cvpoint2d32f p2 = cvpoint2d32f(12.34,43.45); cout << p2.x << " " << p2.y <<endl; cvpoint3d32f p3 = cvpoint3d32f(12.34,23.45,56.43); cout << p3.x << " " << p3.y << " " << p3.z << endl; //================================================ ============================= cvsize r = cvsize(3,4);//长方形维数类型 cout << r.width << " " <<r.height << endl; cvsize2d32f r2 = cvsize2d32f(23.45,34.56); cout << r2.width << " " << r2.height << endl; //================================================ ============================= cvrect x = cvrect(3,4,12.34,45.56); cout << x.x << " " << x.y << " " << x.width << " " << x.height << endl; return 0; } 总结:进修到荟萃根基的数据类型 1.点的类型。包括二维和三维,而每一个坐标又可以分为整型和浮点型。其中对待二维,用2d来表示,对待三维,用3d来表示。完全的见代码上,默许的cvpoint类型是一个二维的,整型参数的点。其他的见上。 2.长方形维数类型。长方形一经稳定时二维的类型,于是,形参就只用两个,但是类型可以是整型和浮点型,于是又多了cvsize2d32f这品种型了。 3.有偏移量的长方形维数类型。此时后面两个形参就是偏移量的坐标,永诀为x和y。后头的就是宽和高了。贯注,形参的类型都是整型,所以,倘若像下面的代码那样,就会发作截断管理,取整数部门,于是输入了局就会有所不同。 4.贯注类型和函数的区别。看看,定义一个变量的时刻,用的是类型,即:cvpoint,cvsize,cvrect等等,而对这个类型的变量初始化的时刻用的是对应的函数,于是是cvpoint,cvsize,cvrect,看到纪律了吗?类型的第一个首字母大写,而函数则是对应的类型名的第一个字母大写就可以了。因而,opnecv的这种命名方还是很迷信易记的。 附注:opencv的安设经过以及visual c++的配置方: 1.下载opencv并安设。由于之前一经下载了1.0的版本,所以这里安设的是1.0,默许途径安设,并拣选注册环境变量。 2.查抄体系变量能否更改,只管下面的选项可以会起作用,不过在我的体系中(windows 7),环境变量还是没有更改,于是,拣选初级体系设置---环境变量—体系变量—path—编辑,就是在末了增加途径”; c:\program files\opencv\bin”,然后点击确定加入。 3.安设完后,并不意味着事务就结束了,还必要设定我们的编程环境。完全来说就是visual c++ 6.0的设置。 visual c++ 6.0中设置opencv的设施: 1.拣选tools---option,在弹出的对话框中点击directories标签,在show directories for下拉拣选include files,在directories中增加途径: c:\program files\opencv\cxcore\include c:\program files\opencv\cv\include c:\program files\opncv\cvaux\include c:\program files\opencv\otherlibs\highgui c:\program files\opencv\otherlibs\cvcam\include 2.在show directories for下拉列表框中拣选libarary files,在directories中增加途径: c:\program files\opencv\lib 3.在show directories for下拉列表框中拣选executable files,在directories中增加途径: c:\program files\opencv\bin 4.配置完毕,加入。 配置完毕之后的测试程序(demo1),就是后面的测试程序,编译,运转,ok,完全没有题目,证明配置完毕! gui命令 1.使用到图片管理,出现,制造窗口等命令的时刻,必必要在project—setting选项中设定相应的参数,否则可以会发作连接舛错!这个不同于下面的demo1,由于1中仅仅是用到了一个数据类型,而没有使用cv库函数的效,例如出现,掀开一个图片,运用到第三方库的话,必定要调用api来完毕效,所以,链接库的话,必必要到场,为此,可根据提示消息设置,一样平常的,举办图像管理,都必要使用到这个。 2.途径的题目。先看看demo2程序: #include <cv.h> #include <highgui.h> #include <stdio.h> int main() { iplimage* image = cvloadimage("c:\\users\\liuchang\\test1.bmp"); if(!image){//倘若加载腐臭 printf("error:导入图片出错,很可以是途径出错!\n"); return 0; } cvnamedwindow("win1",cv_window_autosize);//制造一个窗口 cvmovewindow("win1",100,100);//定位一个窗口 cvshowimage("win1",image);//在制造的窗口中出现一个图片 //cvwaitkey(0);//等候用户输入,否则一闪而过,看不到图片 cvreleaseimage(&image);//贯注使用完后一定要开释 return 0; } 此段程序中,效很简陋,就是接济用户出现一副图片,运路程序,可以出现进去一幅一经保存的图片,而不必要任何的其他api来完毕。在opencv中,管理图像的函数很多,此处只是简陋的图像出现命令! 另外,下面的注释很真切的出现了程序的各段代码的效,这里不再说明。对待完全的说明,后头还会继续!必要贯注的一点就是,途径,必要两个斜线,此处很紧张,由于对待一个字符串,在作为途径掀开的时刻,必要”\\”才干够被评释为一个斜线,所以倘若像下面间接给出途径的话,必要指定是两个斜线,否则会出错! ok,下面试试从客户端来输入数据,即行使main函数可以从用户输入数据来编写: #include <cv.h> #include <highgui.h> #include <stdio.h> #include <string.h> int main(int argc, char **argv) { char num[20]; char getup[20]; int i ; itoa(argc,num,10); puts(num); puts(argv[0]); puts(argv[1]); strcpy(getup,argv[1]); for(i = 0; i < strlen(getup); i++) putchar(getup[i]); putchar('\\');//输入时一个斜线,而倘若仅仅一个斜线的话,会报错! iplimage* image = cvloadimage(argv[1]); if(!image){//倘若加载腐臭 printf("error:导入图片出错,很可以是途径出错!\n"); return 0; } cvnamedwindow("win1",cv_window_autosize);//制造一个窗口 cvmovewindow("win1",100,100);//定位一个窗口 cvshowimage("win1",image);//在制造的窗口中出现一个图片 cvwaitkey(0);//等候用户输入,否则一闪而过,看不到图片 cvreleaseimage(&image);//贯注使用完后一定要开释 return 0; } 关于main函数参数的题目,在后面的说明中很真切,不过这里必要再次说明: 首先,argc读入的是输入参数的个数,例如这里输入:test2h:\ray.jpg,那么读取的argc的个数就是2,而argv是一个数组,用来寄存输入的参数,既然参数为2,那么该数组就有两个参数,一个argv[0],即后面的那个程序名test2,尔后头的那个参数就是读入的那个途径。贯注的一点是:读取后寄存的途径和输入的数据可以不同,完全来说就是,输入的是:h:\ray.jpg,而在机内存储的这个字符串的形式是:h:\\ray.jpg,也就是说,这个字符串是依照能够一般出现那个斜线符来安排的,也就是本义字符安排的,读入的数据将被转换精确的能够表示的数据。从下面的考证代码中可以看到。 同时,计算strlen(argv[1])也会觉察,两个斜线’\\’被评释一个字符! 对待,putchar(‘\\’),倘若仅仅是一个斜线的话,会报舛错,但是两个的话就一般出现一个’\’了。贯注是表示的字符,用的单引号,所以,两个斜线被评释为一个字符。 tips:倘若输入参数是:test2 h:\\ray.jpg,还是可以一般运转的。 注记:和c库函数不同,例如open函数,途径是open(“c:\test.c”,o_rdonly);这样的话,内里就是一个斜线哦。所以opencv是不同的途径写,一定要贯注,还有下面评释的那个输入参数的题目,就ok了。 倘若途径不对,则会有下面提示消息: h:\opencv\test4\test4.cpp(15) : warning c4129: 'o' : unrecognized character escape sequence h:\opencv\test4\test4.cpp(15) : warning c4129: 'l' : unrecognized character escape sequence 所以,一定要加双下划线! 3.输入管理: opencv中如何反响鼠标事呢?例如,如何反响点击鼠标,如何反响鼠标被按下呢? 其实,只必要完毕下面mousehandler这个方就可以了: 那么,如何注册鼠标监听呢?看下面这段代码: int mouserparam = 5; cvsetmousecallback("win1",mousehandler,&mouserpara m); 也就是说,完全的完毕监听函数由mousehandler来完,而要注册,也就是让它何时监听,监听哪一个窗口,则必要用cvsetmousecallback函数来完毕,完全的参数,可查阅api文档,当然,也可以由下面应用推测进去。 下面的代码很容易就完毕了鼠标被点击并且同时按下ctrl键的监听作为和鼠标开释的作为,当然,还可以完毕更多的效,完全的就是使用event的占定,以及和flags连合完毕的复合键占定! 4.后面讲到了如何完毕监听鼠标事,那么这里讲下如何监听键盘事: 看看下面的代码: int key ; key = cvwaitkey(0); if(key == 'q'){ printf("quit\n"); return 0; } 下面这段代码的兴味就是不竭的等候输入,倘若输入时q的话就加入程序,实验之,觉察有用。从这里引申下几点: (1)对待cvwaitkey函数的参数,就是等候的毫秒数,倘若是0,则表示不竭的等候输入,进入一个循环。而它的前往值,就是按下的按钮的键值。当然,倘若要等候一定的时间,倘若没有输入还是加入的话,可以采用cvwaitkey(1000)这样的完全参数,这样在等候的经过没有输入的话,还是可以一般加入,而不是想后面的循环在那里。 (2)倘若要完毕不竭循环的话,可以采用下面的这个形式: while(1){ key = cvwaitkey(10); if(key == 27) break; switch(key){ case 'h': break; case 'i': break; } } 这种方式也很好的完毕了循环等候多重输入的形式。 5.如何管理拖动条事: 上图即拖动条,如何制造并反响该事呢? 1.制造: int trackbarval = 25; int maxval = 100; cvcreatetrackbar("bar1","win1",&trackbarval,maxval ,trackbarhandler); 这样就设置了一个称号为bar1的拖动条。 2.反响事:行使函数trackbarhandler来完毕 void trackbarhandler(int pos) { printf("trackbar position: %d\n",pos); } 贯注这个监听是主动的。也就是说不必要自身举办任何的注册,只须制造了,并且写了这个函数,就可以完毕主动的监听,由于,在制造的函数中,末了的一个参数就是一个监听的函数。 附记:完备的代码如下: #include <cv.h> #include <highgui.h> #include <stdio.h> #include <string.h> void mousehandler(int event,int x,int y,int flags, void *param) { switch (event) { case cv_event_lbuttondown: if(flags & cv_event_flag_ctrlkey) printf("left button down with ctrl pressed!\n"); break; case cv_event_lbuttonup: printf("left button up!\n"); break; } } void trackbarhandler(int pos) { printf("trackbar position: %d\n",pos); } int main(int argc, char **argv) { // char num[20]; // char getup[20]; // int i ; // itoa(argc,num,10); // puts(num); // puts(argv[0]); // puts(argv[1]); // strcpy(getup,argv[1]); //for(i = 0; i < strlen(getup); i++) // putchar(getup[i]); // putchar('\\'); iplimage* image = cvloadimage(argv[1]); if(!image){//倘若加载腐臭 printf("error:导入图片出错,很可以是途径出错!\n"); return 0; } cvnamedwindow("win1",cv_window_autosize);//制造一个窗口 cvmovewindow("win1",100,100);//定位一个窗口 cvshowimage("win1",image);//在制造的窗口中出现一个图片 // int mouserparam = 5; // cvsetmousecallback("win1",mousehandler,&mouserpara m); // int key ; // key = cvwaitkey(0);//等候输入,等候时间为1000ms // if(key == 'q'){ // printf("quit\n"); // return 0; // } int trackbarval = 25; int maxval = 100; cvcreatetrackbar("bar1","win1",&trackbarval,maxval ,trackbarhandler); //int pos = cvgettrackbarpos("bar1","win1"); //int pos = cvgettrackbarpos("bar1","win1"); //cvsettrackbarpos("bar1","win1",25); cvwaitkey(0);//等候用户输入,否则一闪而过,看不到图片 cvreleaseimage(&image);//贯注使用完后一定要开释 return 0; } 为您推荐以下相关文章10年星座4月运势qq空间背景音乐查询如何测八字现代i50天蝎座年星座运势 文章来源地址:http://sortlandet.blog.163.com/
编者按:2年10月18日。(beijinghyundaimotorcompany,简称北京现代)中外合资经营企业。总投资5.1亿元人民币,占地面积15万平方米的北京现代汽车技术中心,目前正在紧张的施工建设之中详文

