Opencv+ROS实现摄像头读取处理画面信息

一、工具

ubuntu18.04

ROS+opencv2

编译器:Visual Studio Code

二、原理

图像信息

ROS数据形式:sensor_msgs::Image

OpenCV数据形式:cv:Mat

通过cv_bridge()函数进行ROS向opencv转换

cv_bridge是在ROS图像消息和OpenCV图像之间进行转换的一个功能包。

ros->opencv

cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8);

可以在回调函数里进行转换

    cv_bridge::CvImagePtr cv_ptr;
    try
    {
      cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8);
    }
    catch (cv_bridge::Exception& e)
    {
      ROS_ERROR("cv_bridge exception: %s", e.what());
      return;
    }

将ROS图像消息转换在OpenCV中使用,可以进行图像处理和opencv操作。

opencv->ros

使用toImageMsg()成员函数

try
{
 msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", frame).toImageMsg();  
}
 catch (cv_bridge::Exception& e)
{
  ROS_ERROR("cv_bridge exception:%s",e.what());
}

驱动相机

通过opencv直接打开相机0,vieo_device为video0

 VideoCapture cap(video_device);  //dev/video0
    if(!cap.isOpened())   
    {  
        ROS_ERROR("Can not opencv video device\n");  
        return 1;  
    }  

话题发布

ROS中标准的消息订阅和发布方式为

ros::NodeHandle nh;

ros::Subscriber sub = nh.subscribe("topic", 1, Callback);

ros::Publisher pub = nh.advertise<sensor_msgs::Image>("topic", 1);

只会发布单一话题

使用image_transport进行发布话题

ros::NodeHandle nh;

image_transport::ImageTransport it(nh);

image_transport::Subscriber sub = it.subscribe("topic", 1, Callback);

image_transport::Publisher pub = it.advertise("topic", 1);

这种方式会发布一系列话题

然后将转换后的图像发布即可

三、使用

在摄像头画面加一个圆并发布出去

通过rqt_image_view查看话题

这里只进行简单的使用,后续可以通过opencv进行颜色识别,轮廓识别等等,以及人脸数字识别,将所有的opencv项目通过ROS包装起来。

这里附上源码链接

https://github.com/jiezz12/Opencv_ros.githttps://github.com/jiezz12/Opencv_ros.git

参考:

http://wiki.ros.org/image_transport

https://my.oschina.net/u/4273421/blog/3587403

相关推荐
码蜂窝编程官方10 分钟前
【含开题报告+文档+PPT+源码】基于SSM的电影数据挖掘与分析可视化系统设计与实现
java·vue.js·人工智能·后端·spring·数据挖掘·maven
遗落凡尘的萤火-生信小白12 分钟前
转录组数据挖掘(生物技能树)(第11节)下游分析
人工智能·数据挖掘
XinZong22 分钟前
【OpenAI】获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!
人工智能
没有余地 EliasJie23 分钟前
深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录
人工智能·嵌入式硬件·深度学习
丶Darling.42 分钟前
MIT 6.S081 | 操作系统 | Lab1: Xv6 and Unix utilities
linux·服务器·c语言·操作系统·unix·lab·mit 6.s081
Burfitt.Lee1 小时前
Linux:confluence8.5.9的部署(下载+安装+pojie)离线部署全流程 遇到的问题
linux·运维·服务器
vvw&1 小时前
使用 Nginx 在 Ubuntu 22.04 上安装 LibreNMS 开源网络监控系统
linux·运维·服务器·nginx·ubuntu·github·librenms
运维&陈同学1 小时前
【zookeeper02】消息队列与微服务之zookeeper单机部署
linux·服务器·分布式·微服务·zookeeper·云原生·消息队列·云计算
HelpLook HelpLook1 小时前
高新技术行业中的知识管理:关键性、挑战、策略及工具应用
人工智能·科技·aigc·客服·知识库搭建
__lost1 小时前
Python 将彩色视频转换为黑白视频(MP4-格式可选)
python·opencv·音视频