4.2 OpenCV-人体/脸检测、OpenCV-边缘检测类、OpenCV-结构分析类(冰达机器人摄像头与图像使用)

ops/2024/10/22 18:37:28/

4.2摄像头与图像

4.2.1摄像头的驱动与图像查看

移动机器人使用启动摄像头:

roslaunch robot_vision robot_camera.launch

正常启动后摄像头上的红色指示灯会亮起来

打开虚拟机在PC运行rqt工具查看图像

rqt_image_view

启动工具后即可弹出下图窗口,在红框中选择话题“/image_raw/compressed”即可查看当前摄像头的图像画面。

这里建议选择/image_raw/compressed话题是因为这个话题输出的图像会进行一个压缩可以避免带宽过大而卡顿。通过rostopic bw命令可以查看到这两个话题带宽有倍数级差异。

4.2.1b安卓ROS手机APP中查看机器人摄像头图像

首先在机器人端运行底盘控制功能包和摄像头功能包

roslaunch base_control base_control.launch

roslaunch robot_vision robot_camera.launch

按照前面章节介绍的方法用手机app连接到机器人,获取到机器人摄像头的画面。结合摇杆控制就可以实现一个第一视角的驾驶了。

4.2.2OpenCV-人体/脸检测
4.2.2.1人脸检测

机器人运行摄像头功能包和人脸检测功能包

roslaunch robot_vision robot_camera.launch

roslaunch robot_vision face_detection.launch

PC打开rqt_image_view工具,订阅/face_detection/image/compressed,即可实现人脸检测

4.2.2.2人脸识别

机器人三个终端中分别运行下面个节点

启动摄像头roslaunch robot_vision robot_camera.launch

启动人脸识别roslaunch robot_vision face_recognition.launch

启动人脸数据录入roslaunch robot_vision face_recognition_train.launch

启动人脸数据录入后首先给要录入的人脸取名,这里取名为‘a’

然后给人脸拍照,PC端打开rqt_image_view工具,订阅/face_detection/image/compressed来检测人脸。检测到人脸后,在人脸录入的终端按回车就给人脸拍好一张照片了。选择是否再拍一张,直接输入‘n‘不再多拍即可完成人脸录入。回到rqt_image_view工具,订阅/face_recognition/debug_image话题就可以进行人脸识别啦

4.2.2.3人体检测:

机器人先启动摄像头功能包,然后启动人体检测节点

roslaunch robot_vision robot_camera.launch

roslaunch robot_vision people_detect.launch

打开rqt_image_view工具,订阅/people_detect/image/compressed,即可实现人体检测

4.2.3二维码AR标签位姿检测

本节内容介绍二维码标签的位姿检测,所用到的二维码图像在“ROS机器人用户资料_2021\课件文档”文件夹中有提供,使用A4纸按照1:1打印出来即可。

机器人启动摄像头roslaunch robot_vision robot_camera.launch

机器人启动AR标签跟踪roslaunch robot_vision ar_track.launch

PC启动rviz

载入配置文件,点击File->OpenConfig。找到home->catkin_ws->src->robot_vision->config。选择这个配置文件

载入配置文件后,拿出准备好的二维码标签。可以看到,左边标识出了二维码的位置,右边标识出了二维码的远近距离

机器人端或PC新开一个终端运行rostopic echo /ar_pose_marker

可以看到这里有输出每个二维码对应的序号,以及相对于相机原点的距离信息和四元数表示的航向姿态

分布式运行的概念:所谓分布式运行就是说,ros的节点通过分布式通讯运行在同一局域网下的不同机器人上。我们先CTRL+C将机器人AR标签跟踪节点关闭;

然后在PC启动AR标签跟踪roslaunch robot_vision ar_track.launch

此时回到PC端的rviz界面就会发现,结果跟刚才在机器人端运行AR标签跟踪一样。但是相比较刚才的画面这次有明显的卡顿现象。这是因为AR标签跟踪需要订阅image_raw这个话题,所以PC端运行时就需要先将image_raw的内容传输到PC端。而image_raw占用的带宽是非常高的,在传输过程就会因为数据丢失等问题造成卡顿。

需注意的是并非所有节点都可以在同一局域网下的不同设备上运行,例如类似rviz这种跟显示图像相关的就必须在有显示器的设备,例如PC端运行,而通过ssh远程登录的机器人是不具备显示器条件的。而跟底盘和摄像头这种硬件设备相关的节点就必须在机器人端运行,因为PC端没有底盘和相机这样的硬件。

4.2.4OpenCV-边缘检测类

4.2.4.1边缘检测

机器人启动摄像头roslaunch robot_vision robot_camera.launch

机器人启动边缘检测roslaunch robot_vision edge_detection.launch

PC用两个终端打开两个rqt_image_view工具,分别订阅/image_raw/compressed和/edge_detection/image/compressed

左边正常的图像是两个箱子,而右边显示的就是两个箱子的边缘线条。

边缘检测可以提取图像中明暗或者颜色变化较大的图像边缘。

边缘检测可以传送参数进去,默认情况是0,可修改传进去的参数

roslaunch robot_vision edge_detection.launch edge_type:=2

可以看到纸箱已经完全看不清了,而另一个箱子金属边框和黑色箱体颜色明暗对比非常强烈的就被抽象成了一些线条。通过边缘检测将复杂的图像抽象成一些线条以后,就可以从中提取特征。

4.2.4.2霍夫直线检测

机器人端启动摄像头roslaunch robot_vision robot_camera.launch

机器人端启动直线检测roslaunch robot_vision hough_lines.launch

PC端两个rqt_image_view工具分别订阅/image_raw/compressed和/hough_lines/image/compressed

4.2.4.2霍夫圆检测

机器人端启动摄像头roslaunch robot_vision robot_camera.launch

机器人端启动圆形检测roslaunch robot_vision hough_circles.launch

PC端两个rqt_image_view工具分别订阅/image_raw/compressed和/hough_circles/image/compressed

4.2.5OpenCV-结构分析类

本节内容演示OpenCV中结构分析类demo的应用

4.2.5.1 find_contours轮廓检测

机器人启动摄像头roslaunch robot_vision robot_camera.launch

机器人启动轮廓检测roslaunch robot_vision find_contours.launch

PC两个rqt_image_view工具分别订阅/image_raw/compressed和/find_contours/image/compressed

可以看到轮廓检测是将整个手掌的轮廓都描绘出来了,它和前面介绍的边缘检测是有区别的。边缘检测是将边缘的线条描绘出来,而轮廓检测是将整个轮廓显示出来了。

这里我们重新打开一个动态调参工具rosrun rqt_reconfigure rqt_reconfigure

选择find_contours在右侧可以动态调节参数来改变图像效果

4.2.5.2 general_contours轮廓检测

机器人端启动摄像头roslaunch robot_vision robot_camera.launch

机器人端启动一个通用的轮廓检测roslaunch robot_vision general_contours.launch

rqt_image_view工具订阅/general_contours/image/compressed

这个节点不再描绘具体的轮廓,而是通过矩形将轮廓包围出来。当我们需要对图片进行分析时,需要将图片提取出来。而在上一个例程当中,获取到的具体轮廓是一个不规则图形它是无法提取成一张图片的。而这个节点描绘的方框可以被截取获得一张新的图片。

我们输出一下矩形描述相关的话题

rostopic echo /general_contours/rectangles

这里会输出矩形的中心和长宽摆放的角度,这样就可以根据这些信息去图像内截取矩形。

4.2.5.3 凸包检测 convex_hull

机器人启动摄像头roslaunch robot_vision robot_camera.launch

机器人启动凸包检查roslaunch robot_vision convex_hull.launch

rqt_image_view工具订阅/convex_hull/image/compressed

凸包就是将最外层的点连接起来构成凸多边形,这种方式介于轮廓检测和通用轮廓检测之间。这个多边形不会存在内凹,这样能用最小的面积围出轮廓所在区域。

4.2.5.3 图像矩计算 Contour_Moments

机器人启动摄像头roslaunch robot_vision robot_camera.launch

PC启动图像计算roslaunch robot_vision contour_moments.launch debug_view:=true

图像计算的应用会启动一个图像化的调试窗口(右侧)

机器人端或PC运行rostopic echo /contour_moments/moments

这个话题会输出对图像的一些计算包括重心,中心,周长,面积等。


http://www.ppmy.cn/ops/5499.html

相关文章

基于CppHttpLib的Httpserver

1 背景 大多数嵌入式设备由于没有屏幕输出,只能通过Web页面来配置。这里利用CPPHttpLib来实现HttpServer。 2 HttpServer HttpServer是利用CPPHttpLib开源库实现的Http服务器CppHttpLib是基于C11的HTTP开源库,开源协议是MIT. CppHttpLib下载地址 2.1 …

C语言扫雷游戏完整版、标记、取消标记、自动拓展

文章目录 前言一、扫雷完整代码总结 前言 用C语言实现扫雷游戏,标记功能,取消标记功能,自动拓展功能,标记只是雷,并且数量等于雷的数量,自动获胜。 一、扫雷完整代码 // test.c 源文件 #define _CRT_SECU…

接口自动化测试之调用excel实现接口数据依赖

背景 我们把接口的信息按照规定的格式都维护在excel文件中,通过代码实现调用excel,完成接口的自动化测试。这样,只需要负责人将主要逻辑写好之后,公司其他不会写代码的员工,也可以通过维护excel中的接口数据&#xff…

数据库第五次作业官方答案

说明 之前的互评结束之后就无法查看答案,所以想着互评期间把答案保存下来,方便之后进行复习 # 1.1 select ID, name,sec_id from instructor natural left outer join teaches;# 1.2 select ID,name, count(sec_id) as Numberofsetions fro…

Linux zipinfo命令教程:详解ZIP文件信息查看工具(附实例详解和注意事项)

Linux zipinfo命令介绍 zipinfo是一个用于列出ZIP存档中文件的技术信息的命令。这些信息包括文件访问权限、加密状态、压缩类型、压缩程序的版本和操作系统或文件系统等。它最常见于MS-DOS系统。 Linux zipinfo命令适用的Linux版本 zipinfo命令在大多数Linux发行版中都可以使…

AWS SAP(Certified Solutions Architect- Professional)认证题库详解(一)

很多朋友在做AWS认证的时候拿到题库之后,却不理解正确答案的原理,这里针对每一条答案都给了一个非常详细的解释,同时也会积累丰富的云计算架构的实践经验,保证看得懂,记得住,看完一遍之后就可以去考试了。  问题1 一家公司使用Amazon在单个m4.2xlarge AmazonEC2实例上…

Sql server备份还原sql语句

使用备份文件指定新的数据库名称 USE MASTER --这里注意要使用MASTER,以免出现待还原库被占用的情况 RESTORE DATABASE [tsw_test] --为待还原库名 FROM DISK C:\Program Files\Microsof…

Java 多线程加法求和

Java 多线程加法求和 代码 先上代码再上解析: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger;public class Sum implements …