创意手绘风PPT模板
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像处理
主要用到的是RGB三色原理,分别代表红 色,绿色和蓝色,每种颜色有0-255范围 的亮度值,这三种颜色可以按亮度值不 同形成其它颜色,如黑色是RGB按0 0 0组 成,白色是RGB按255 255 255组成,红色 和绿色等比缓和形成黄色。
首先将图像二值化处理,分割图像,根据 像素点阈值判断是否为红色,若为红色, 将像素点RGB置为255 255 0,即将红色转 换为黄色,若不是红色,将RGB值置为0 0 0,即显示黑色,最后再显示出来。
4.实验结果
图形界面
机器人走方形
图像处理
人脸识别
5.实验总结
实验总结
通过本次实验,我们对机器人的控制,人脸识别还有图像处理相应的内容和 原理有了一定的了解,收获很多,在学习机器人运动学理论课程时,接触到 的都只是一些理论性的信息,还有计算,但是通过本次的亲自动手编程,调 试机器人,我们对这些理论信息在实际中的应用又有了更加深刻的理解,但 是本次实验还是有一些遗憾的,因为第四个颜色跟随功能并没有成功实现。 本次实验的大部分时间都花费在程序的调试,各种错误的修改,还有Visual C# 软件的使用,经常出现一些库文件,函数调用,参数定义和使用的问题,在 今后的学习生活中我们会继续坚持对C#语言和机器人的学习和掌握,在此也 要衷心地感谢老师的耐心指导以及为我们提供的实验机会。
颜色跟随
首先根据图像处理的结果判断图像的中心位置,定义 一个参考图像,其坐标为(X,Y),图像的宽度为width, 高度为height,通过X与width,Y与height的比值大小 判断被跟随的图像前后左右的运动状态,通过机器人 的两个电机控制跟随运动。
3.部分程序
机器人走方形
short speed = (short)trackBar1.Value; myRobot.DcMotorVelocityNonTimeCtrAll((short)(-motDir * speed), (short)(motDir * speed), -32767, -32767, -32767, -32767);//机器人向前移动 Thread.Sleep(2000); myRobot.DisableDcMotor(0); myRobot.DisableDcMotor(1);//机器人停止移动 Thread.Sleep(2000); myRobot.DcMotorVelocityNonTimeCtrAll((short)(motDir * speed), (short)(motDir *speed), -32767, -32767, -32767, -32767); /机器人向左移动 Thread.Sleep(745); myRobot.DisableDcMotor(0);
人脸识别
主要是识别人脸和人眼信息,然后再返回 这些信息内容,处理后显示出来,这里为 了方便实现功能,首先是将bitmap类型的 图像转换为image<Bgr,byte>类型,然后动 态地获取人脸和人眼的信息,这其中的动 态识别很是关键,因为要经过信息获取, 信息处理,输出信息这些阶段,对实时性 要求较高,即摄像头获取到的内容要实时 地显示在电脑上,在返回人脸和人眼的检 测信息后,即可开始人脸识别,在图像界 面左侧是摄像头的内容,右侧界面识别出 人脸和人眼的动态位置信息以及大致的轮 廓,并且中间的传输延迟要尽可能地缩小。
2018机器人实验答辩展示
小组成员: 黄金鹏 刘天恒 宋正阳 阙衍聪 胡涛 张旭
1实验内容
目
2实验原理
录 3部分程序
4实验结果
5实验总结
ห้องสมุดไป่ตู้
1.机器人走方形 2.图像识别 3.人脸识别 4.颜色跟随
1.实验内容
2.实验原理
机器人走方形
机器人走方形主要是通过前进左转90°,依次循环进行四次, 通过控制两个电机改变机器人运 动状态,实现控制机器人走方形 路径,每次前进的距离和转动的 角度需要经过多次调试,观察效 果。
else{ p[2]=p[1]=p[0]=(byte)0;//将非红转换为黑色}
p+=3;}
p+=offset;}
机器人走方形
if (img2_state == 2 && Bmp_twovalue != null){ if (!doingThreadFD){ doingThreadFD = true; blocknum = 0; Emgu.CV.Image<Bgr, byte> image = new Emgu.CV.Image<Bgr, byte>(Bmp_twovalue); long detectionTime; List<Rectangle> faces = new List<Rectangle>(); List<Rectangle> eyes = new List<Rectangle>(); DetectFace.Detect(image, "haarcascade_frontalface_default.xml", "haarcascade_eye.xml",faces, eyes, out detectionTime); foreach (Rectangle face in faces){ Formercenterx = (face.Left + face.Right) / 2; Formercenterx = (face.Top + face.Bottom) / 2; Xwidth = face.Width; Ywidth = face.Height; blocknum++; CvInvoke.Rectangle(image, face, new Bgr(Color.Red).MCvScalar, 2);} foreach (Rectangle eye in eyes) CvInvoke.Rectangle(image, eye, new Bgr(Color.Blue).MCvScalar, 2); pictureBoxCamera2.Image = image.Bitmap; doingThreadFD = false; }
图像处理
byte* p = (byte*)Scan0;//Scan0指向函数内部信息的指针 int offset = stride - Image_Width * 3;// 定义offset写入像素索引值
byte gray = (byte)0; Formercenterx=Image_Width/2;// 表示目标图像中心点坐标X Formercentery=Image_Height/2; / /表示目标图像中心点坐标Y
for(int y=0; y<Image_Height; y++){ for(int x = 0; x < Image_Width; x++)//得到阈值,通过两个for循环实现对原图像的 分割{ gray=p[0];//灰色是由RGB二值化128+128+128组成 if(p[2]>p[1] + IMAGE_MIDDLE && p[2] > p[0] + IMAGE_MIDDLE )//IMAGE_MIDDLE表 示图像阈值,该句判断颜色是否为红色{ p[0]=(byte)0; //表示蓝色blue p[1]=(byte)255;//表示绿色green p[2]=(byte)255;//表示红色red}