《江苏科技报·教育周刊》(双周刊,国内统一刊号CN32-0019),是江苏省唯一以社会立场透析当代中国教育的报纸。秉承“科技推动教育,教育改变人生”的理念,《江苏科技报·教育周刊》一直注意保持与教育前沿工作的密切联系,定位于教育宏观研究,兼顾微观探讨,注重教育文化生态的构建与引导,时刻关注鲜活的教育实态,着眼于教育文化的深层构建,努力赋予教育以深厚的文化内涵,致力打造中国最好的教育媒体。
国内统一刊号:CN32—0019
编辑部地址:江苏省南京市鼓楼区中山路55号新华大厦48楼
视觉识别——感兴趣区域ROI |
来源:本站原创 作者:主讲人:薛晖 发布日期:2021-04-12 11:31:20 |
薛晖 北京市育英学校信息技术教师,北京市青少年机器人竞赛技术委员会成员,北京市机器人骨干教师,海淀区信息技术骨干教师,海淀区优秀科技辅导教师。曾任全国智能控制大赛裁判长,北京青少年机器人竞赛裁判,北京市海淀区创客秀项目负责人。指导学生获得中国青少年机器人竞赛创意项目一等奖,北京市青少年创新大赛一等奖,北京市青少年科技后备人才早期培养计划展评活动最佳学生奖,等等。
教学背景 本节课的主题是“视觉识别——感兴趣区域ROI”,利用Python语言实现图像及视频中兴趣点的单独选取,能够节省网络监控摄像机带宽占用和视频存储空间。复习课前知识为本节课的项目做好充足的准备,过程中教师注重提示学生摄像头的视频显示就是一帧帧已经存储好的单张图像显像,图像按照一定的时间间隔不断地刷新,就形成了视频的播放。 感兴趣区域(Region of Interest,ROI)的行与列是对图像的裁剪范围,教师通过范例讲解,帮助学生理清进行区域选择的方法,为项目中的兴趣点选取做准备。在项目实施过程中为学生提供已学程序的资料,减轻学生的代码输入量;在项目临近成功时增加改变项目需求的环节,让学生体验解决突发问题的过程,锻炼学生的信息意识。
1.了解什么是ROI,学会如何在数字化图像处理中实现兴趣点的裁剪。 2.通过需求分析来解决问题,经过自主探究,结合实际效果,实现视频中单独显示兴趣点的程序设计。 3.对发现的问题能够进行自主探究和修正,提升信息意识。在反复尝试的过程中进行深入思考,通过思考、编程,实现理想的效果,从而获得成功的喜悦。
教学难点 设计出单独显示兴趣点的视频。
广播软件、Python软件、Anaconda 3软件、Spyder开发环境、计算机、摄像头等。
一、了解计算机视觉中的图像原理 在计算机视觉中,如果我们对视野中的某一个位置感兴趣,就要对该位置进行单独的提取和图像处理。首先,我们要了解的就是图像的数字化存储,也就是RGB彩色图像的制作方法。 彩色图像由一个三维数组组成,在Python中用[行像素范围,列像素范围,颜色通道号]来表示,例如: img[10:20,0:100,0]=0 img[10:20,0:100,1]=255 img[10:20,0:100,2]=255 其中img变量中10:20表示10至20行的像素范围,0:100表示0至100列的像素范围,0表示蓝色通道,1表示绿色通道,2表示红色通道。蓝色通道0,绿色、红色通道255,混合出来的颜色就是黄色。 二、实验探究
师:视频显示多张静态图片,按照一定的时间间隔不断地刷新,也就是一帧一帧地播放图片形成了视频的效果。在Python中使用cv2.VideoCapture(0)函数可以读取实时的视频图像并存储到变量中,再把读取到的变量通过cv2.imshow()函数显示出来,如此弹屏循环就实现了摄像头拍摄的实时视频图像。在程序中,“ret, frame = capture.read()”表示一帧一帧读取视频图像并存储到frame变量中。“frame = cv2.flip(frame, 1)”表示将图像镜像翻转。
ret, frame = capture.read() frame = cv2.flip(frame, 1) cv2.imshow('video', frame) c = cv2.waitKey(10) if c == ord('q'):
break
cv2.destroyAllWindows() 实验2:感兴趣区域(ROI) 师:在图像处理过程中,我们可能对某一特定区域感兴趣,该区域称为感兴趣区域(ROI)。例如,如果我们对图1中的五角星感兴趣,就可以用“img[70:170,460:590]”来表示,其中70:170指的是行的像素范围,460:590指的是列的像素范围,如图2。 程序语句“interest=img[70:170,460:590]”的作用是裁剪范围内的图像,其中70:170是行的范围,460:590是列的范围。“cv2.imshow('Interest',interest)”的作用是显示裁剪后的interest存储的图像,窗口名称为“Interest”。 教师下发程序代码,学生进行实验,具体程序如下:
img=cv2.imread("YX2.jpg") interest=img[70:170,460:590] cv2.imshow('Interest',interest) cv2.waitKey() cv2.destroyAllWindows()
教师引导学生进行思考,通过实验1和实验2分析如何进行视频ROI的方法:把cv2.VideoCapture(0)函数读取到的图像进行裁剪,然后新建一个窗口显示出来,窗口名称为“video interest”。具体程序设计如下: import cv2 cap = cv2.VideoCapture(0) while True:
frame = cv2.flip(frame, 1)
cv2.imshow('video interest', interest) if ord('q') == cv2.waitKey(40)
cv2.destroyAllWindows()
教师提出项目需求:学校门前安装了固定机位的安保摄像机,且摄像机不能移动。现在想对画面中部分内容进行识别,但画面中有很多无用的部分,影响了识别的效果,需要对识别的部分进行单独提取使用。
程序设计中右上角的100×100区域,并不能直接写进程序,因为视频画面大小为480行×640列,左上角为(0,0),所以右上角的范围为[0:100,540:640]。其中0:100是行的范围,540:640是列的范围。再使用实验2方法对采集的图像进行裁剪,完整程序如下:
cap = cv2.VideoCapture(0)
frame = cv2.flip(frame, 1) interest=frame[0:100,540:640] cv2.imshow('video all', frame) cv2.imshow('video interest', interest) if ord('q') == cv2.waitKey(40): break cap.release()
在学生进行项目研究的过程中,教师巡视并进行单独指导。若部分学生已完成右上角兴趣区域的单独显示,教师可增加项目任务——单独显示视频左下角200行×50列的区域,推算区域范围。教师应鼓励学生挑战更高的任务难度,分层递进教学,促进不同层次学生发展,锻炼学生的应变能力。
在本节课中的教学过程中,笔者努力落实新课程改革要求,让学生自主发现问题并解决问题。本节课采用了情景化项目研究的形式开展探究学习,以图像中的兴趣点为主线展开自主探究。视觉识别作为我校特色校本课程,充分利用现有的教学资源,结合当前人工智能国家战略,培养学生的信息技术学科素养。利用知识的迁移引导学生发散思维,用已学知识解决更多的生活实际问题,为国家培养科技人才做出自己的贡献。 在课程实施的过程中,发现学生自主研究的能力偏弱,遇到未知问题时对自己的能力不够自信,不知道自行探究解决方法,存在坐等教师讲解灌输的现象,这也导致学生进入研究状态慢,课堂时间不够用。本节课是学生情景化项目研究的第一次尝试,后续的课程也会采用类似的方法进行自主研究,相信在学生适应这种学习方式后,能够提高课堂时间效率。 |
发表评论 |