c++ opencv 捕捉图像发送topic rosimage类型

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

int main(int argc, char** argv)
{
    ros::init(argc, argv, "pub_cam_node");
    ros::NodeHandle nh;

    cv::VideoCapture capture(0); //0为读取摄像头,“video.format"为读取本地视频
    if (!capture.isOpened()) {
        ROS_ERROR_STREAM("Failed to open video device\n");
        ros::shutdown();
    }

    //image_transport负责订阅和发布
    image_transport::ImageTransport it(nh);
    image_transport::Publisher pub_image = it.advertise("camera", 1);

    cv::Mat image;//Mat为OpenCV里定义的图像类

    while (ros::ok()) {
        capture >> image; //载入

        if (image.empty()) {
            ROS_ERROR_STREAM("Failed to capture image!");
            ros::shutdown();
        }
        //将图像从cv::Mat类型转化成sensor_msgs/Image类型并发布
        pub_image.publish(cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg());//将图像从sensor_msgs/Image类型转化成cv::Mat类型
        
        cv::imshow("camera", image);
        cv::waitKey(3); // opencv刷新图像 3ms

		ros::spin();
    } 
}

仅仅就这样是会报错的,你还需要更改cmake

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  cv_bridge
  image_transport
  std_msgs
)
## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)
find_package(OpenCV 3 REQUIRED)
find_package(OpenCV REQUIRED)
find_package(PkgConfig REQUIRED)

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
  ${hiredis_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
)

add_executable(251up src/251up.cpp src/ConfigFile.c)
target_link_libraries(
  251up
  ${catkin_LIBRARIES}
  ${hiredis_LIBRARIES}
  ${OpenCV_LIBRARIES}
)

还需要更改package.xml

<build_depend>image_transport</build_depend> 

<run_depend>image_transport</run_depend> 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值