OpenCV是什么OpenCV入门级教程

【菜科解读】
首先声明,这一系列博文是本人在学习 OpenCV 的过程中对自身学习的一个总结而已,仅作为 OpenCV 入门级参考,并没有什么内容值得高手参考,所以,只适合和我一样正值学习状态者阅读,高手无意者请飘过,但欢迎留言指教。
OpenCV 是一个开源的计算机视觉库,其采用 C/C++ 编写,被设计为可移植的库,OpenCV 的设计目标是执行速度尽可能的快,其主要关注的是实时应用,同时,OpenCV 的另一个目标是构建一个简单易用的计算机视觉框架,以帮助开发人员更便捷地设计更复杂的计算机视觉相关的应用程序。
OpenCV 的结构和内容
上面这幅截图是 OpenCV 源码的文件组成结构,可以看出其中包括 cv ,cvaux , cxcore , highgui , ml 这 5 个模块。
如果以库来体现这几个模块之间的关系的话,可以采用下面的结构图来展现:CV: 包含了基本的图像处理函数和高级的计算机视觉算法,包括图像处理,图像结构分析,运动描述和跟踪,模式识别和摄像机标定。
ML: 是机器学习库,包含一些基于统计的分类和聚类工具。
HighGUI: 包含图像和视频的输入/输出函数。
CXCORE: 包含了 OpenCV 的一些基本的数据结构和相关函数。
CVAUX: 该模块则是一般用存放即将被淘汰的算法和函数,同时也包含一些新出现的实验性的函数和算法。
关于 OpenCV 的介绍到此介绍,下面呢,就是通过一个 Demo 来学习一些常用的 API 的使用。
Demo 学习
Demo01
下面的 Demo 将介绍如何显示一张图片,具体 API 的使用请注意注释。
//在HighGUI 模块中包含了图像和视频的输入/输出的基本函数 #include "highgui.h" //使用了命令行下运行的形式,其中要在命令行下传递参数 int main(int argc,char ** argv){//通过cvLoadImage 将一幅指定路径的图片加载到内存中 //同时会生成一个IplImage 类型的结构 //这个结构会指向图片所在的内存区域 IplImage * image=cvLoadImage(argv[1]); //通过cvNamedWindow 来建立一个窗体 //因为图片必须在指定的窗体中才能显示 cvNamedWindow("Demo01",0); //通过cvShowImage 函数来指定在指定的窗口中显示指定的图片 cvShowImage("Demo01",image); //暂停程序的执行 //只有当用户按下任意键后才执行后面的代码 cvWaitKey(0); //释放掉加载到内存中的图片所占的内存资源 cvReleaseImage( //销毁窗口 cvDestroyWindow("Demo01"); }
至于程序的执行的话,必须到命令行下执行,同时还需要将一张图片拷贝到 exe 文件所在的目录,然后再在命令行中指定该图片作为参数传递到 Main 函数中。
Demo02
下面继续看下一个 Demo,这个 Demo 将展示播放视频文件:
//图像和视频的输入/输出均在HighGUI 模块中 #include "highgui.h" //播放视频文件只需要循环的顺序的读取视频中的每一帧 //读到帧后,便可以将这个帧作为普通的图像一样显示即可 int main(int argc,char **argv) { //首先需要建立一个窗口来容纳视频的播放 cvNamedWindow("Demo02",CV_WINDOW_AUTOSIZE); //打开一个视频文件,返回的 CvCapture 结构中包含了视频文件的信息 CvCapture *capture=cvCreateFileCapture(argv[1]);IplImage *frame; //循环顺序的读取视频中的帧 while(1){ //获取当前播放帧的下一个帧,并且将获取到的帧加载到内存中,覆盖掉前面帧所占的内存控件frame=cvQueryFrame(capture); if(!frame) { //如果没有读取到帧的话则说明播放完毕了 //从而退出播放 break; } //将读取到的帧显示在窗口中 cvShowImage("Demo02",frame); //每播放一个帧就在此等待30 毫秒 char c=cvWaitKey(30); //如果在30 ms 中用户按下了ESC 键 //(ESC 的ASCII 为27)则退出播放 if(c==27) { break; } } //分配的内存需要手动释放 cvReleaseCapture(&capture); //销毁窗口 cvDestroyWindow("Demo02"); }
Demo03
上面呢,确实是可以成功的播放视频了,但是一般的视频播放器都是有个滚动条的,
允许用户手动拖动滚动条从而定位到视频指定的帧上,
下面我们就要实现这个功能了。
//CV 模块中包含了图像处理,图像结构分析, //运动描述和跟踪,模式识别和摄像机标定 #include "cv.h" //包含了图像和视频的输入/输出 #include "highgui.h" //用来标定滚动条当前的位置 int g_Pos=0; //将打开的视频文件作为一个全局变量使用 CvCapture * g_Capture=NULL; //当拖动滚动条后,会回调这个函数 //同时会将当前滚动条的位置以32 位形式传递过来 void CallBackTrackBarSlide(int pos) { //这里便是重新设置视频文件当前播放的帧 cvSetCaptureProperty(g_Capture,CV_CAP_PROP_POS_FRAMES,pos); }int main(int argc,char **argv) { cvNamedWindow("Demo03",CV_WINDOW_AUTOSIZE); //根据参数打开指定的视频文件 g_Capture=cvCreateFileCapture(argv[1]); //获得总的帧数int totalFrames= (int)cvGetCaptureProperty(g_Capture,CV_CAP_PROP_FRAME_COUNT); if(totalFrames!=0) { //创建滚动条,在这里指定了滚动条拖动后的回调函数 cvCreateTrackbar("TrackBar","Demo03", &g_Pos,totalFrames,CallBackTrackBarSlide); } IplImage * frame; //循环的顺序的遍历所有的帧 while(1){ //获取当前帧的下一个帧,并将其加载到内存中frame=cvQueryFrame(g_Capture); if(!frame) { break; } cvShowImage("Demo03",frame); char chKeyCode=cvWaitKey(30); if(chKeyCode==27) { break; } } cvReleaseCapture(&g_Capture); cvDestroyWindow("Demo03"); return 0; }
在测试的时候需要注意,有一些视频文件时不支持动态指定帧的操作,所以有可能拖动时会失败。
然后就可以拖动滚动条来定位帧了
Demo03
上面的 Demo 呢确实是实现了可以通过拖动滚动条来实现对视频帧的动态控制,
但是有一个问题就是滚动条并不会跟随视频的播放而自带增加,也就是,随时时间流逝,
视频会一直播放,但是滚动条如果不人为地拖动的话是不会发生改变的,
而我们要是实现的就是当视频播放到哪一个帧了,滚动条就应该位于相应的位置上,
所以下面的 Demo 就来实现这个功能。
//CV 模块中包含了图像处理,图像结构分析, //运动描述和跟踪,模式识别和摄像机标定 #include "cv.h" //包含了图像和视频的输入/输出 #include "highgui.h" //用来标定滚动条当前的位置 int g_Pos=0; //将打开的视频文件作为一个全局变量使用 CvCapture * g_Capture=NULL; //当拖动滚动条后,会回调这个函数 //同时会将当前滚动条的位置以32 位形式传递过来 void CallBackTrackBarSlide(int pos) { //这里便是重新设置视频文件当前播放的帧 cvSetCaptureProperty(g_Capture,CV_CAP_PROP_POS_FRAMES,pos); g_Pos=pos; } int main(int argc,char **argv) { //建立一个名字叫做Demo04 的窗体 cvNamedWindow("Demo04",CV_WINDOW_AUTOSIZE); //根据参数打开指定的视频文件 g_Capture=cvCreateFileCapture(argv[1]); //获得总的帧数 int totalFrames= (int)cvGetCaptureProperty(g_Capture,CV_CAP_PROP_FRAME_COUNT); if(totalFrames!=0) { //创建滚动条,在这里指定了滚动条拖动后的回调函数 cvCreateTrackbar("TrackBar","Demo04", &g_Pos,totalFrames,CallBackTrackBarSlide); } IplImage * frame; //循环的顺序的遍历所有的帧 while(1) { //获取当前帧的下一个帧,并将其加载到内存中 frame=cvQueryFrame(g_Capture); if(!frame) { break; } cvShowImage("Demo04",frame); char chKeyCode=cvWaitKey(30); if(chKeyCode==27) { break; } g_Pos++; //当播放完200 个帧的时候才触发滚动条滚动 if(g_Pos%200==0) { cvSetTrackbarPos("TrackBar","Demo04", g_Pos); } } cvReleaseCapture(&g_Capture); cvDestroyWindow("Demo03"); return 0; }
从而实现了滚动条随着视频的播放而自动滚动的效果。
这一篇博文就写到这里了,从上面可以看出,主要是随着逐步的深入来介绍一些 OpenCV 的常用的 API ,其主线是首先是加载一张图片,而后再是加载视频,再在视频中加入滚动条,最后是滚动条和视频联动的效果,随着一步一步的深入,可以更好的熟悉 OpenCV 的几个常用的 API 。
OpenCV,是什么,入门,级,教程,首先,声明,这,2025年,自己缴社保和单位缴社保的分别是什么
而个人缴纳社保只能选择2个险种,即养老保险和医疗保险。
退休年龄?公司缴纳社保?:男性通常60岁退休,女性工人50岁退休,女性干部55岁退休。
?个人缴纳社保?:男性通常60岁退休,女性统一为55岁退休。
缴纳方式?个人缴纳社保?:需要自行前往社保经办机构办理参保登记和缴费手续,可以选择按月、按季或按年缴纳。
?公司缴纳社保?:由公司人事统一办理参保登记和缴费手续,费用从员工工资中扣除。
缴费基数?公司缴纳社保?:缴费基数通常按照员工上一年度月平均工资计算,如果工资低于当地平均工资的60%,则按照60%计算,高于300%则按照300%计算。
?个人缴纳社保?:缴费基数可以选择,通常在当地上年度社会平均工资的60%至300%之间。
?缴费比例?公司缴纳社保?:养老保险公司承担16%,员工个人承担8%;医疗保险公司承担8%-10%,员工个人承担2%左右。
??个人缴纳社保?:养老保险需要个人承担20%,医疗保险也需要个人承担8%-10%。
享受的待遇?公司缴纳社保?:员工可以享受养老保险、医疗保险、失业保险、工伤保险和生育保险的待遇。
?个人缴纳社保?:主要享受养老保险和医疗保险的待遇,无法享受失业、工伤和生育保险的待遇。
交社保的重心目的在于保护公民在遭遇年老、疾病、工伤、失业及生育等生活风险时,能够依据法律法规,从社会那里获得必要的物质援助与帮助。
社保的作用为:养老保险:确保退休后的经济来源,提供基本生活保证。
工伤保险:因工伤导致无法工作时,工伤保险会提供相应的赔偿,减轻医疗费用和收入损失。
失业保险:在失业期间提供经济支持,减轻生活压力。
生育保险:降低生育成本,鼓励生育相关法规的确定。
医疗保险:为疾病提供保险,减轻因疾病带来的经济负担。
温馨提示:本数据源于网络,仅供参考!具体需以当地具体法规为准!
社保缴纳基数是什么意思,影响退休金数额的因素有哪些
一般来说,如果有单位,单位会承担社保的大部分费用,个人每个月需要缴纳的社保费用大约在200多元。
而如果是个人全部缴纳,每个月需要交的费用大约千元左右。
接下来随新社丫丫一起了解防城港社保的详情。
社会保险缴纳基数是多少?社会保险缴纳基数,是按照职工上一年度1月至12月的所有工资性收入所得的月平均额来确定的。
每年确定一次,且确定以后,一年内不再变动,社保基数申报和调整的时间,一般是在7月。
社保的缴费基数,是指企业或者职工个人用于计算缴纳社会保险费的工资基数,用此基数乘以费率,就是企业或者个人应该缴纳的社会保险费的金额。
企业一般以企业职工的工资总额作为缴费基数,职工个人一般则以本人上一年度的月平均工资为个人缴纳社会保险费的工资基数。
缴费基数由社会保险经办机构根据用人单位的申报,依法对其进行核定。
影响到养老保险待遇的因素有哪些?缴费年限:同样平均缴费指数是1的情况下,缴费15年可以领取15%的退休上年度社会平均工资,缴费20年可以领取20%,缴费30年可以领取30%,缴费40年可以领取40%,缴费年限越长,领的也就越多。
缴费基数:鼓励人们高基数缴费,当然这也是从养老保险基金的角度考虑。
从个人角度,可能性价比不够高,但这却是唯一能够弥补缴费年限缺失而领取高养老金的因素。
养老保险个人账户累计储存额:个人养老账户里面的钱,是参保人每个月缴纳养老保险时个人缴纳的8%的部分,逐年累计并且有利息,个人账户记账利率越高,个人账户余额越多,个人账户养老金也就越多。
退休地点的不同,会导致养老金的计算基础存在差异。
例如,像北京和上海这样的大城市,由于其经济发达,养老金的计算基数相对较高,因此在这类一线城市退休的人,往往能够享受到更高水平的养老金。
》点击新社通app社保计算器,了解你的社保缴费明细!新社通app数据所得,数据仅供参考。
温馨提示:本数据仅供参考!具体需以当地有关法规为准!