网站大量收购独家精品文档,联系QQ:2885784924

《鸿蒙机器人编程》6-实践课-图像采集与目标识别--实训指南.docxVIP

《鸿蒙机器人编程》6-实践课-图像采集与目标识别--实训指南.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

ROS星火计划 从0到1搭建ROS环境 NXROBOExBot

PAGE8

实践课-图像采集与目标识别

课程内容:

本节将对OpenCV简单介绍,并创建一个目标识别的功能包,学习图像采集+目标识别的综合应用

课程目标:

了解OpenCV库

掌握图像采集方法

掌握使用OpenCV实现目标识别

一.OpenCV介绍

开源视觉库OpenCV

OpenCV的全称是:OpenSourceComputerVisionLibrary。OpenCV是一个基于BSD许可(开源)发行的跨平台计算器视觉库,实现了图像处理和计算器视觉方面的很多通用算法,轻量而高效。在OpenCV2.4之后,其架构改为以C++为主(之前为C),同时提供了Python、Java等语言的接口。

OpenCV的官方网站是/。

OpenCV在ROS中使用

一般来说,ROS中已经集成了OpenCV,所以不需要进行额外的安装操作。

如果没有安装,推荐安装ROSperception包,perception集成了OpenCV和开源点云处理库PCL以及其他机器人感知相关的包,输入

$sudoaptinstallros-你的ROS版本-perception

如果想要使用GPU加速等高级功能,那可能就需要自行编译OpenCV库了,ROS集成的OpenCV并不包含这些拓展模块。

二.程序解析

1.编写一个目标识别的程序

首先构建包空间:

$cd~/spark/src

$catkin_create_pkgcv_tutorialcv_bridgeimage_transportroscppsensor_msgsstd_msgs

然后进入功能包的src文件夹,新建一个文件并命名为cv_tutorial.cpp。

$cdcv_tutorial/src

$touchcv_tutorial.cpp

代码解析

在此文件中,定义了两个类ImageConverter、ImageProcessor。ImageConverter负责订阅ROS的topic,并将图像格式进行转换。在ROS中图像数据是以Image消息的格式进行传输的,然而OpenCV的图像格式是cv::Mat,所以我们需要使用cv_bridge将消息转换成Mat。这就是ImageConverter类要实现的功能,具体使用Subscriber获取图像,用cv_bridge进行图像格式的转换。

其具体实现如下:

_image_sub=_it.subscribe(SUBSCRIBLE_TOPIC,1,ImageConverter::imageCb,this);

其中,_it是image_transport::ImageTransport类型,订阅一个Topic,并注册了一个回调函数imageCb,指定其在Topic有信息来到时如何处理消息,其中SUBSCRIBLE_TOPIC可以修改为其他用户需要订阅的Topic名。

以下为代码实现:

回调函数是这个类最主要的一个实现功能的地方。在回调函数中,首先使用cv_bridge将ROS的image消息转换到OpenCV所能处理的Mat格式。

sensor_msgs::image_encodings::BGR8说明当前数据我们规定以8位BGR格式转换。

ImageProcessor用于处理目标识别。主要工作是,提取当前获取图像的边缘,和预存的模板图像(在这里我们提供的是一个圆)进行模板匹配。在匹配度大于阈值的时候认为当前图像中存在与预存模板相同的图像,并将其在窗口中绘出。

以下是代码实现:

之后,我们要进行初始化。

首先创建了一个120×120的3通道8位图像,并使用cv::circle在其中心画了一个圆作为范本。

cv::cvtColor(templateImg,this-_template,CV_BGR2GRAY)转换模板为灰度图像。

在主处理函数中:

cv::cvtColor(_img,gray_img,CV_BGR2GRAY)将当前图像转换为灰度图,便以进行边缘检测。

cv::Canny(gray_img,edges,30,90)使用canny操作数对图像进行边缘检测。

cv::matchTemplate(edges,this-_template,result,CV_TM_CCORR)进行模板匹配,在本文中我们使用CV_TM_CCORR,即自相关匹配的方式进行匹配,其输出的值越大表示匹配度越高。

cv::minMaxLoc(result,minValue,maxValue,minLoc,maxLoc);在图像中寻找匹配结果最小和最大的位置。

当最大匹配结果大于阈值时候,将其位置用方框表示出,并输出其在图像中的位置。

文档评论(0)

青柠职教 + 关注
实名认证
服务提供商

从业10年,专注职业教育专业建设,实训室建设等。

1亿VIP精品文档

相关文档