Download presentation
Presentation is loading. Please wait.
1
工作室课题 小车走迷宫 大连民族学院 电工电子实验教学中心
2
课题介绍 计算机控制小车推球(☆☆☆) 利用计算机自动发布指令控制小车将物体推到指定位置
摄像头监控小车位置,通过图像处理,对小车发布运动指令。 计算机与小车之间的通信为串行通信(有线)或无线方式 小车已有,可根据需要改进并编写控制程序 计算机控制小车走迷宫(☆☆☆☆) 计算机控制小车走出迷宫 其他与“小车推球”类似 小车自动走迷宫(☆☆☆☆☆☆) 没有计算机,全部利用小车上的处理器进行控制 需要良好的硬件及软件能力,时间充裕 两组限制
3
现有资源介绍 1、小车照片
4
现有资源介绍 2、迷宫的图片
5
相关背景知识 电脑鼠的相关比赛 2006国际电脑鼠邀请赛表演(新加坡)
第三届上海市嵌入式系统创新设计应用竞赛”——暨“IEEE标准电脑鼠走迷宫”邀请赛(长三角地区 )
6
相关背景知识 本地控制 通讯协议 Software 传感或拍摄 USB线 图像识别 远程控制 迷宫 无线通讯 系统组成与信息流程
7
相关背景知识 系统基本框图 计算机控制小车走迷宫系统结构图
8
相关背景知识 技术难点 图像实时采集 图像处理——预处理,形状检测,小车跟踪,摄像机标定 最优线路生成 闭环控制算法 小车电机控制
单片机编程、通信
9
课程组织形式及要求 提供的材料 玩具小车一部,采用直流电机驱动。 小车驱动电路板(89S52板+电机控制板各一) USB-RS232线缆一根
无线模块一对。
10
课程组织形式及要求 基本要求 小车可根据需要自行改装,如加装标志物品,车牌号码等(加分),但不得做破坏性设计(扣分)。
运行过程中不得故意剧烈冲撞迷宫(扣分)。 可使用任意软件进行算法设计,但不得完全采用市场上已有的现成的可执行程序(即应能提供源代码),软件算法应能适应变化的迷宫。 小车与计算机的通讯可采用RS232串行通信模式,亦可采用无线模块。
11
课程组织形式及要求 组长负责组内成员的管理,组内任务分配,组员的考核,与教师和助教的沟通 组长负责组员的管理与考核 与教师和助教的沟通
组长负责制 组长负责组内成员的管理,组内任务分配,组员的考核,与教师和助教的沟通 组长负责组员的管理与考核 与教师和助教的沟通 助教 助教的作用在于解决实验室安排、仪器使用问题,并提供宏观的、经验的指导,不能负责具体细节支持。 每组分配一名对口助教,有问题可以先于对口助教联系,其他助教亦可咨询。 教师 总体支持,协调
12
课程组织形式及要求 成绩组成 小组成绩( 80% ) – 作品(40%)(外观、功能、软件及硬件的易操作性等)
小组成绩( 80% ) – 作品(40%)(外观、功能、软件及硬件的易操作性等) – 报告 (30%)(完整性、合理性、可读性、可参考性等) – 每周进度文档(5%) – 对其他组的贡献(5%) 个人成绩( 20% ) – 组长及助教对组员的评价 (10 +5 ) – 论坛贡献度 (5%) 个人突出贡献加分( <10% ,总成绩不超过100)
13
课程组织形式及要求 课程进度 1-3周:分组,选题 4-8周:查找资料,方案设计,同时开设讲座 9-15周:制作,功能实现 16周:验收
17周:完成课程设计报告
14
课程组织形式及要求 课程讲座 图像处理基础及软件包(OPEN CV)的使用初步 Labview使用基础 LabWindows/CVI使用基础
微处理器89S52及其Keil C使用基础 根据小组选题或个人兴趣选择参加,提前1-2周网上公布讲座时间及具体内容,参加讲座不计入平时成绩。
15
OpenCV图像处理包简介 OpenCV图像处理软件包简介
16
OpenCV图像处理包简介 课题中的成像系统要求 光源亮度要足够、均匀 成像的投影关系 镜头聚焦使整个场景清晰
17
OpenCV图像处理包简介 OpenCV 介绍 OpenCV = Open Source Computer Vision Library
OpenCV是跨平台的函数库,独立于操作系统/硬件/图形管理器,支持Windows和Linux环境 OpenCV的开发目的是实时应用,代码效率高,运算速度快 OpenCV为Integrated Performance Primitives (IPP) 提供了透明接口
18
OpenCV图像处理包简介 OpenCV的功能 图像数据的操作 ( 分配、释放、复制、设置和转换)
图像是视频的输入输出I/O (文件与摄像头的输入、图像和视频文件输出) 矩阵和向量的操作以及线性代数的算法程序(矩阵积、解方程、特征值以及奇异值等) 各种动态数据结构(列表、队列、集合、树、图等)
19
OpenCV图像处理包简介 OpenCV的功能
基本的数字图像处理(滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图、图像金字塔等) 结构分析(连接部件、轮廓处理、距离变换、各自距计算、模板匹配、Hough变换、多边形逼近、直线拟合、椭圆拟合、Delaunay 三角划分等) 摄像头定标(发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计、立体对应)
20
OpenCV图像处理包简介 OpenCV的功能 运动分析(光流、运动分割、跟踪) 目标识别(特征法、隐马尔可夫模型:HMM)
基本的GUI (图像与视频显示、键盘和鼠标事件处理、滚动条) 图像标注(线、二次曲线、多边形、画文字)
21
OpenCV图像处理包简介 CV Highgui CXCORE OpenCV的模块 CV:图像处理、视觉算法
Highgui:GUI,图像、视频接口
22
OpenCV图像处理包简介 例程1 IplImage结构: int nChannels:1、2、3、4通道
depth:IPL_DEPTH_8U,IPL_DEPTH_32F int origin:0 - 顶—左结构, 1 - 底—左结构 int width:图像宽像素数 int height:图像高像素数 int imageSize:图像数据大小 int widthStep:排列的图像行大小,以字节为单位 char * imageData:指向排列的图像数据 对一幅灰度图象,nChannels为1,对RGB图像nChannels为3或者4;depth通常为IPL_DEPTH_8U,即8位整型。 I(x,y)c ~ ((T*)(img->imageData + img->widthStep*y))[x*N + c] OpenCV定义宏: I(x,y)c ~ CV_IMAGE_ELEM( img, T, y, x*N + c ) 1. #include <cxcore.h> 2. #include <highgui.h> 3. #include <math.h> 4. int main( int argc, char** argv ) { CvPoint center; double scale=-3; IplImage* image = argc==2 ? cvLoadImage(argv[1]) : 0; if(!image) return -1; center = cvPoint(image->width/2,image->height/2); 10. for(int i=0;i<image->height;i++) for(int j=0;j<image->width;j++) { double dx=(double)(j-center.x)/center.x; double dy=(double)(i-center.y)/center.y; double weight=exp((dx*dx+dy*dy)*scale); uchar* ptr = &CV_IMAGE_ELEM(image,uchar,i,j*3); ptr[0] = cvRound(ptr[0]*weight); ptr[1] = cvRound(ptr[1]*weight); ptr[2] = cvRound(ptr[2]*weight); } 19. cvSaveImage( “copy.png”, image ); 20. cvNamedWindow( "test", 1 ); 21. cvShowImage( "test", image ); cvWaitKey(); cvReleaseImage(&image); 23. return 0; }
23
OpenCV图像处理包简介 例程1 安装OpenCV 1.0版,选择注册环境变量
打开VS2005,创建项目,编写代码,设置OpenCV的路径 编译运行
24
OpenCV图像处理包简介 OpenCV与Windows位图
利用OpenCV的Highgui访问图像、视频、摄像头,直接获取OpenCV格式的图像数据,进行图像处理,最后转为位图在VC++程序中显示 利用WinAPI或MFC访问图像、数据、摄像头,再将获取的数据转换为OpenCV格式,用OpenCV进行图像处理,最后再将结果转换为位图在VC++程序中显示 Bitmap->OpenCV 例程 // 打开位图 dBitmap.DibLoadImage(hWnd, true); // 将位图转为IplImage结构 hdc = GetDC(hWnd); hBmpApi = dBitmap.CreateDDB(hdc); imageApi = hBitmap2Ipl(hBmpApi); ReleaseDC(hWnd, hdc); // 显示 cvNamedWindow("OpenCV", 1); cvShowImage("OpenCV", imageApi); OpenCV -> Bitmap: 例程 // 利用OpenCV打开图像 image = cvLoadImage("lena.bmp"); // 将IplImage结构转换为位图 hBitmap = IplImage2DIB(image); //显示 BitBlt (hdc, 0, 0, image->width, image->height, hdcMem, 0, 0, SRCCOPY) ; OpenCV与Windows位图
25
OpenCV图像处理包简介 例程2
26
OpenCV图像处理包简介 例程3 CvCapture* capture = 0; IplImage * frame;
capture = cvCaptureFromCAM(1); cvNamedWindow( "OpenCV", 1 ); if(capture) { while(1) { if( !cvGrabFrame( capture )) break; frame = cvRetrieveFrame( capture ); if( !frame ) cvShowImage("OpenCV", frame); if( cvWaitKey( 5 ) >= 0 ) } cvReleaseImage( &frame ); cvReleaseCapture( &capture ); cvDestroyWindow("OpenCV");
27
OpenCV图像处理包简介 课外作业 熟悉OpenCV,了解CxCore,CV库 编写一个WinAPI或MFC或OpenCV程序
直接调用VFW,或者调用OpenCV采集摄像头图像,显示在Windows对话框中 对每帧图像做例程1中的处理,显示在新的窗口中 对上一步的每一帧,调用CxCore中的绘图函数,在新窗口中画矩形 记录每秒处理的帧数
Similar presentations