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

ops/2024/11/30 4:26:52/

一、工具

ubuntu18.04

ROS+opencv2

编译器:Visual Studio Code

二、原理

图像信息

ROS数据形式:sensor_msgs::Image

OpenCV数据形式:cv:Mat

通过cv_bridge()函数进行ROSopencv转换

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/video0if(!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.giticon-default.png?t=O83Ahttps://github.com/jiezz12/Opencv_ros.git

参考:

http://wiki.ros.org/image_transport

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


http://www.ppmy.cn/ops/137822.html

相关文章

【python】摄像头调用马赛克恶搞

摄像头调用 代码展示安装库代码解释实时视频画面添加马赛克效果 使用python调用电脑摄像头 代码展示 import cv2 cap cv2.VideoCapture(0) while(cap.isOpened()):retval, frame cap.read()cv2.imshow(Live, frame)if cv2.waitKey(5) > 0:break shao安装库 这个代码引用…

Redis笔记

Redis笔记 前言 Redis概述 Redis介绍 应用场景 相关技术 Redis数据类型 Redis字符串(String) 概述 数据结构 Redis列表&#xff08;List) 概述 数据结构 Redis集合&#xff08;Set&#xff09; 概述 数据结构 Redis哈希&#xff08;Hash&#xff09; 概述 数…

【论文速读】| 人工智能驱动的网络威胁情报自动化

基本信息 原文标题&#xff1a;AI-Driven Cyber Threat Intelligence Automation 原文作者&#xff1a;Shrit Shah, Fatemeh Khoda Parast 作者单位&#xff1a;加拿大圭尔夫大学计算机科学学院 关键词&#xff1a;网络威胁情报&#xff0c;AI自动化&#xff0c;攻击技术和…

UE5安装教程及设置

学习链接&#xff1a;01-安装UE5及设置_哔哩哔哩_bilibili

《C++搭建神经网络基石:开启智能编程新征程》

在人工智能的璀璨星空中&#xff0c;神经网络无疑是最为耀眼的星座之一。而 C以其卓越的性能和高效的执行效率&#xff0c;成为构建神经网络模型的有力武器。今天&#xff0c;就让我们一同探索如何使用 C构建一个基础的神经网络模型&#xff0c;踏上智能编程的奇妙旅程。 一、…

选择使用whisper.cpp进行语音转文字

需要将一些wav格式的语音文件转成文字&#xff08;ASR&#xff0c;STT&#xff09;&#xff0c;接到这个任务后&#xff0c;首先上网搜索有没有现成免费的工具或服务可以使用。常用的关键字如“语音转文字 免费 在线”。 搜到的很多野鸡网站&#xff0c;都可以免注册免费提供短…

Vue单页面应用和多页面应用

在 Vue.js 中&#xff0c;“单页面”&#xff08;SPA&#xff0c;Single Page Application&#xff09;和"多页面"&#xff08;MPA&#xff0c;Multi Page Application&#xff09;是两种不同的应用结构&#xff0c;它们的差异主要体现在页面的加载方式、路由的使用、…

投影变换库 PinholeCamera

目录 Kornia库简介 构建内参&#xff0c;外参&#xff1a; 深度转点云&#xff1a; 光栅化pytorch3d 点光栅化设置&#xff1a; PointsRasterizer 光栅化 Kornia库简介 Kornia 是一个基于 PyTorch 的计算机视觉库&#xff0c;它提供了一系列可微的计算机视觉操作和算法。…