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

相关推荐
Leinwin1 分钟前
VibeVoice-ASR:突破60分钟长音频处理瓶颈,语音识别进入端到端时代
人工智能·音视频·语音识别
没有不重的名么5 分钟前
Multiple Object Tracking as ID Prediction
深度学习·opencv·计算机视觉·目标跟踪
Godspeed Zhao5 分钟前
从零开始学AI7——机器学习0
人工智能·机器学习
Dev7z6 分钟前
基于深度学习的肺音分类算法研究
人工智能·深度学习
dingzd957 分钟前
AI 代理购物落地后,真正的“增量岗位”叫——商品数据工程
大数据·人工智能·跨境电商·内容营销·跨境
市象8 分钟前
印奇“大于”50亿
人工智能
陈天伟教授13 分钟前
人工智能应用- 语言理解:08.大语言模型
人工智能·语言模型·自然语言处理
铁蛋AI编程实战16 分钟前
AI调用人类服务入门与Python实现(30分钟搭建“AI+真人”协作系统)
开发语言·人工智能·python
deep_drink20 分钟前
【基础知识二】彻底读懂拉普拉斯矩阵 (Laplacian)
人工智能·深度学习·线性代数·矩阵
m0_6948455721 分钟前
music-website 是什么?前后端分离音乐网站部署实战
linux·运维·服务器·云计算·github