• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

ROS系统学习6—摄像头图像数据的采集

人工智能 _寒潭雁影 1292次浏览 0个评论

上篇文章我们介绍了怎么用OpenCV打开图像并将图像数据发送出去, 这解决了一部分问题。但实际工程应用中,我们经常需要实时获取图像数据,因此仅仅读取本地的图片是不够的。本篇我们将研究如何获取以USB/rtsp等格式传输的摄像头的数据,与上一篇文章相互呼应。

 

USB摄像头:

 

首先,我们要有一个USB摄像头。确保了这一点后将摄像头插上去,输入命令:

 

ls /dev/v*

 

如果看到”/dev/video0″,则表示摄像头被成功驱动了。

 

为了验证上面的说法,我们可以下载个程序看看摄像头拍到的画面:

 

sudo apt-get install camorama

 

装完输入

 

camorama

 

正常的话就可以看到画面了。

 

到此,准备工作做完。ROS有很多的开源包提供读取USB数据的功能,比如usb_cam和gscam等,但本人尝试过后都存在这不程度的问题(可能是本人用的摄像头比较神奇),因此本人直接用OpenCV读取来处理,简单粗暴,效果迷人!只需要把上篇文章的rosOpenCV.cpp的代码改写下即可:

 

#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>
#include <stdio.h>
 
int main(int argc, char** argv)
{
  ros::init(argc, argv, "image_publisher");
  ros::NodeHandle nh;
 
  cv::Mat image;
  cv::VideoCapture cap(0);//0为要索引的摄像头
  if(!cap.isOpened()) 
  {
      ROS_INFO("can not opencv video device\n");
      return 1;
  }
  while (nh.ok()) 
  {
    cap >> image;//从摄像头抓取一帧图像
    cv::imshow("",image);
    cv::waitKey(3);
  }
 
  ros::spin();
}

 

由上面也可以看出,我们很多时候说的“ROS驱动程序”,不过就是读取数据的一个ROS节点,并不是我们通常所定义的那种连接软硬件的程序。当然ROS操作系统,也不是我们正常所定义的操作系统,两者当真如出一辙。

 

其余格式摄像头以后会逐步补充上来。


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明ROS系统学习6—摄像头图像数据的采集
喜欢 (0)

您必须 登录 才能发表评论!

加载中……