ubuntu16.04下ROS操作系统学习笔记(六 )机器视觉-摄像头标定-ROS+OpenCv-人脸识别-物体跟踪-二维码识别(上)

简介: ubuntu16.04下ROS操作系统学习笔记(六 )机器视觉-摄像头标定-ROS+OpenCv-人脸识别-物体跟踪-二维码识别(上)

 

  1. ROS中的图像数据。
  2. 摄像头标定。
  3. ROS+Opencv应用实例(人脸识别、物体跟踪)。
  4. 二维码识别。
  5. 扩展内容:物体识别与机器学习。

启动摄像头:没有安装的话参照下面命令安装一下:

sudo apt-get install ros-kinetic-usb-cam

安装完成之后就可以启动摄像头了:

roslaunch usb_cam usb_cam-test.launch

我们接下来看一下这个摄像头的驱动到底发布了哪些数据:

我们刚才的摄像头就是usb_cam/image_raw这个话题,我们接下来看一下它发布的消息的具体类型:

第一行是这个话题消息的类型,从第一行可以看到,是sensor_msg这样一个类型。那这样一种图像消息里面的成员变量有哪些呢?通过以下命令我们可以打印出这样的一个消息类型里面的具体成员变量。

里面的具体的成员变量的解释如下:

  • Header:很多话题消息里面都包含的。里面有三个内容:消息头,包含消息序号,时间戳和绑定坐标系。消息的序号表示我们这个消息发布是排第几位的,并不需要我们手动去标定,每次发布消息的时候会自动地去累加; 绑定坐标系表示的是我们是针对哪一个坐标系去发布的。header有时候也不需要去配置。
  • height:图像的纵向分辨率
  • width:图像的横向分辨率
  • encoding:图像的编码格式,包含RGB、YUV等常用格式,都是原始图像的编码格式,不涉及图像压缩编码;
  • is_bigendian: 图像数据的大小端存储模式;
  • step:一行图像数据的字节数量,作为数据的步长参数;
  • data:存储图像数据的数组,大小为step×height个字节。

在ros里面提供了我们另外一种压缩图像的类型,

  • format:图像的压缩编码格式(jpeg、png、bmp)。
  • data:存储图像数据数组。

原教学视频里面还说了深度摄像头的相关知识,我这里没有深度摄像头,所以有需要的可以自己去看源视频,在我的github里面可以找到视频的相关信息。

摄像头标定

摄像头这种精密仪器对光学器件的要求较高,由于摄像头内部与外部的一些原因,生成的物体图像往往会发生畸变,为避免数据源造成的误差,需要针对摄像头的参数进行标定。

为了保证我们图像的质量,在采集图像之前,我们需要对摄像头做标定。

安装标定功能包:

sudo apt-get install ros-kinetic-camera-calibration

启动摄像头,robot_vision这个包在第五讲的源代码包里面有。

roslaunch robot_vision usb_cam.launch

启动成功之后没有摄像头的界面,因为包里面是没有去打开摄像头的:

 

启动标定包:

rosrun camera_calibration cameracalibrator.py  --size 8x6 --square 0.024 image:=/usb_cam/image_raw camera:=/usb_cam

以上程序就会启动我们标定功能包的一个标定程序。

然后我们打开在功能包里面的doc文件,就可以看到这样一个黑白相见的图片,然后我们做旋转等等操作,移动几遍,标定好了之后如下图所示:

标定成功之后会显示灰绿色的这个按钮颜色。之后我们再点击这个绿色的按钮,然后图形将该会卡住,在后台做一些计算,运行一会之后就能看到如下效果:

我们接着点击save按钮。之后在终端里面会告诉我们标定的数据存放在哪个路径下面:

到此,标定就已经结束了。

rosrun camera_calibration cameracalibrator.py  --size 8x6 --square 0.024 image:=/usb_cam/image_raw camera:=/usb_cam

  1. size:标定棋盘格的内部角点个数,这里使用的棋盘一共有六行,内部8个角点;
  2. square:这个参数对应每个棋盘的边长,单位是米;
  3. image和camera:设置摄像头发布的图像话题。

我们找到刚刚产生的文件,将其解压缩,如下图所示:

然后里面有用的文件是 ost.yaml。然后放入我们的功能包,并将其重命名就可以了:


相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
ROS入门实践
本课程将基于基础设施即代码 IaC 的理念,介绍阿里云自动化编排服务ROS的概念、功能和使用方式,并通过实际应用场景介绍如何借助ROS实现云资源的自动化部署,使得云上资源部署和运维工作更为高效。
相关文章
|
计算机视觉
Opencv学习笔记(十二):图片腐蚀和膨胀操作
这篇文章介绍了图像腐蚀和膨胀的原理、作用以及使用OpenCV实现这些操作的代码示例,并深入解析了开运算和闭运算的概念及其在图像形态学处理中的应用。
1053 1
Opencv学习笔记(十二):图片腐蚀和膨胀操作
|
存储 传感器 编解码
ROS机器视觉入门:从基础到人脸识别与目标检测
前言 从本文开始,我们将开始学习ROS机器视觉处理,刚开始先学习一部分外围的知识,为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本,系统采用Ubuntu20.04,ROS采用noetic。 颜色编码格式,图像格式和视频压缩格式 (1)RGB和BGR:这是两种常见的颜色编码格式,分别代表了红、绿、蓝三原色。不同之处在于,RGB按照红、绿、蓝的顺序存储颜色信息,而BGR按照蓝、绿、红的顺序存储。 rgb8图像格式:常用于显示系统,如电视和计算机屏幕。 RGB值以8 bits表示每种颜色,总共可以表示256×256×256=16777216种颜色
587 70
|
存储 传感器 编解码
ROS机器视觉入门:从基础到人脸识别与目标检测
【11月更文挑战第9天】从本文开始,我们将开始学习ROS机器视觉处理,刚开始先学习一部分外围的知识,为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。
662 56
|
缓存 并行计算 Ubuntu
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
本文是关于在Jetson AGX Xavier上编译FFmpeg(3.4.1)和OpenCV(3.4.0)的详细教程,包括编译需求、步骤、测试和可能遇到的问题及其解决方案。还提供了Jetson AGX Xavier编译CUDA版本的OpenCV 4.5.0的相关信息。
554 4
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
653 1
|
缓存 监控 计算机视觉
视频监控笔记(三):opencv结合ffmpeg获取rtsp摄像头相关信息
本文介绍了如何使用OpenCV结合FFmpeg获取RTSP摄像头信息,包括网络架构、视频监控系统组成、以及如何读取和显示网络摄像头视频流。
620 1
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
969 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
编解码 关系型数据库 计算机视觉
Opencv学习笔记(十一):opencv通过mp4保存为H.264视频
本文介绍了如何在OpenCV中通过使用cisco开源的openh264库来解决不支持H.264编码的问题,并提供了完整的代码示例。
1460 0
Opencv学习笔记(十一):opencv通过mp4保存为H.264视频
|
数据可视化 计算机视觉 Python
opencv可视化学习笔记(一):绘制多图在一个画布上
这篇文章介绍了如何使用OpenCV和PIL库将多张图片绘制在同一个画布上,并提供了具体的Python代码实现。
228 0
opencv可视化学习笔记(一):绘制多图在一个画布上
|
Ubuntu
Ubuntu学习笔记(七):ubuntu下jupyter指定虚拟环境
本文介绍了如何在Ubuntu系统下使用Anaconda和Jupyter Notebook指定并切换不同的虚拟环境。
451 0
Ubuntu学习笔记(七):ubuntu下jupyter指定虚拟环境

热门文章

最新文章