当前位置:   article > 正文

在ROS中用opencv订阅摄像头图像并显示_ros2查看订阅到的图片

ros2查看订阅到的图片

在ROS中用openCV显示摄像头并发布图像数据

参考本人博客:在ROS中用openCV显示摄像头并发布图像数据

在ROS中用opencv订阅摄像头图像并显示

使用C++实现

#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>

void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{
    try   // 如果转换失败,则提跳转到catch语句
    {
        cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image);   // 将图像转换openCV的格式,并输出到窗口
        cv::waitKey(1); // 一定要有wiatKey(),要不然是黑框或者无窗口     
    }
    catch(cv_bridge::Exception& e)
    {
        ROS_ERROR("Could not convert for '%s' to 'bgr8'.", msg->encoding.c_str());
    }
    
}

int main(int argc, char** argv)
{
    ros::init(argc, argv, "imageSub_node");   // 注册节点名 
    ros::NodeHandle nh; // 注册句柄
    image_transport::ImageTransport it(nh); // 注册句柄
    image_transport::Subscriber imageSub = it.subscribe("/cameraImage", 1, imageCallback);  // 订阅/cameraImage话题,并添加回调函数
    ros::spin();  // 循环等待回调函数触发
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

CMakeLists.txt配置

添加(最后两个的imageSub是生成可执行文件的名字,根据自己来设定):

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(imageSub src/image_sub.cpp)
target_link_libraries(imageSub ${catkin_LIBRARIES} ${OpenCV_LIBS})
  • 1
  • 2
  • 3
  • 4

注:如果前两个已经添加了,可以不用再添加

使用Python实现

未完待续

客官!如果觉得有用,给俺点赞支持下呗!

欢迎留言讨论,指出不足和建议!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/845625
推荐阅读
相关标签
  

闽ICP备14008679号