ubuntu16.04下usb相机和kinect1相机

  1. ROS中的图像数据。
  2. 摄像头标定。
  3. ROS+Opencv应用实例(人脸识别、物体跟踪)。
  4. 二维码识别。5
  5. 扩展内容:物体识别与机器学习。  
  •   启动usb相机:需要参照下面命令安装

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

        安装完成后可以启动相机:

roslaunch usb_cam usb_cam-test.launch

  •   启动kinect1相机:需要参照下面命令安装

    以下2种方式,任选一种即可,当然全部安装也没有问题

        1)使用openni_launch

sudo apt-get install ros-kinetic-openni-camera  ros-kinetic-openni-launch

       注意:openni2_launch已经不再支持Kinect任何产品。

       2)  使用freenect_launch

sudo apt-get install ros-kinetic-freenect-camera  ros-kinetic-freenect-stack  ros-kinetic-freenect-launch

    测试RGB摄像头

1)显示RGB图像

方式一:使用rqt_image_view,运行如下命令后弹出窗口

rosrun rqt_image_view rqt_image_view

彩色图像保存方法是最右测按钮,直接保存即可(在配置kinect成功的界面点击图像也可直接保存,保存的位置不一样)

方式二:使用rviz显示,运行后弹出窗口如下:

 rosrun rviz rviz

修改“Fixed Frame”为/camera_rgb_color,接着点击add,选择camera类型。添加成功后选择camera菜单下的Iamge Topic选项,选择/camera/rgb/image_color。

 测试深度摄像头

1)显示深度图

方式一:使用rqt_image_view,运行如下命令后弹出窗口

rosrun rqt_image_view rqt_image_view

深度图像保存方法是最右测按钮,直接保存即可

 

方式二:使用rviz显示,运行后弹出窗口如下:

 rosrun rviz rviz

修改“Fixed Frame”为/camera_depth_optical_frame,接着点击add添加PointCloud2类型,修改“topic”,如下图所示

摄像头标定

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

   1.标定usb相机       

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

安装标定功能包:

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

启动usb摄像头:

        roslaunch usb_cam usb_cam-test.launch  或者  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按钮。之后在终端里面会告诉我们标定的数据存放在哪个路径下面:

      上图中摄像头的名称是narrow_stereo,camera_matrix为相机内参矩阵,distortion_model:plumb_bob 为畸变矩阵,

rectification_matrix为矫正模型(一般为单位矩阵),projection_matrix为外部世界坐标到像平面的投影矩阵。

       到此,相机标定结束了。

     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。然后放入我们的功能包,并将其重命名就可以了:

 2.标定kinect相机

    启动kinect

     roslaunch robot_vision freenect.launch 或者roslaunch openni_launch openni.launch

    启动彩色摄像头

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

点击calibrate后  会稍微卡下

 点击save按钮,参考上面usb标定流程,然后里面有用的文件是 ost.yaml。然后放入我们的功能包,并将其重命名就可以了:

 同上,标定红外摄像头:

启动kinect:

 1.  roslaunch robot_vision freenect.launch 或者roslaunch openni_launch openni.launch

启动红外摄像头:

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

Opencv

Open Source Computer Vision Library

在ROS当中完成Opencv的安装:

ROS与Opencv之间的数据连接是通过CvBridge来实现的。ROS Image Message与OpenCv Ipllmage之间连接的一个桥。 

接下来我们测试一下:

roslaunch robot_vision usb_cam.launch 

这个命令运行完之后是没有结果输出的,我们之后再启动节点: 

rosrun robot_vision cv_bridge_test.py

 再打开ROS测试:

        第一张图片显示的是opencv的图像,是经过opencv的接口,与ros没有关系。而第二张图片是通过ros当中订阅话题来显示的。首先是在ros当中启动了一个节点,那么发布的消息也是ros消息的这种类型,然后通过bridge转接到了opencv系统,然后在opencv里面完成一些处理,像在左上角画出一个圈,并且把处理的图片通过opencv显示出来,再通过bridge发回到ros系统里面,ros再订阅这个话题就可以了.

        在这个类的初始化里面,声明了一个发布者和一个订阅者。订阅者订阅的是usb摄像头发布的话题“”/usb_cam/image_raw“,后面还有一个callback函数。发布者发布的是最终经过opencv处理之后的图像,也就是我们之前在rqt工具里面看到的图像 ”cv_bridge_image“。之后还调用了一下CvBridge。self.bridge = CvBridge()。

        订阅者接收到图像之后就调用回调函数callback:

        在callback函数里面,我们将从ros中接收到的图片数据转换为opencv能够读取的格式。通过调用CvBridge函数就可以实现上述功能,最终的cv_image就是opencv能够去处理的格式。之后我们使用opencv函数里面的一些函数cv2.circle去绘制圆。然后将其显示出来。之后我们再通过bridge.cv2_to_imgmsg将其转换为ros系统的数据格式,再将其发布出去。        

        这里的话需要重点去知道两个函数:

        imgmsg_to_cv2():将ros图像消息转换成OpenCv图像数据;

        cv2_to_imgmsg():将OpenCv格式的图像数据转换成ros图像消息;

人脸检测

基于Haar特征的级联分类器检测算法主要步骤:

  1. 灰阶色彩转换
  2. 缩小摄像头图像
  3. 直方图均衡化
  4. 检测人脸

 

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值