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

相关推荐
Python测试之道几秒前
用LangGraph实现聊天机器人记忆功能的深度解析
人工智能·langchain·prompt
生信宝典1 分钟前
通用温度感知语言模型用于设计具备增强稳定性和活性的蛋白质
人工智能·语言模型·自然语言处理
Arvin62725 分钟前
Linux 完整删除 Systemd 服务的步骤
linux·服务器
带电的小王31 分钟前
VLA--Gemini Robotics On-Device: 将AI带到本地机器人设备上
人工智能·机器人
终端域名33 分钟前
如何解决人工智能在社会治理中面临的技术和伦理挑战?
人工智能·交互技术
猫猫的小茶馆33 分钟前
【STM32】FreeRTOS 消息队列(五)
linux·stm32·单片机·嵌入式硬件·51单片机·智能硬件·pcb工艺
coder_lorraine37 分钟前
【Linux系列】Linux文件类型大揭秘:不只是文件与文件夹的奇幻世界!
linux
倔强的石头10637 分钟前
[源力觉醒 创作者计划]_文心大模型4.5开源:从技术突破到生态共建的国产AI解读与本地部署指南
人工智能·开源·文心一言·文心大模型
AI训练师42 分钟前
基于深度学习的YOLO框架的道路裂缝智能识别系统【附完整源码+数据集】
人工智能
别摸我的婴儿肥43 分钟前
从0开始LLM-GPT-0
人工智能·深度学习