搜索
您的当前位置:首页正文

ros-双目图像数据发布

来源:榕意旅游网

1.简介

最近项目需要读取双目相机获取图像数据并发布出来,做个简单记录

2.完整代码

并没有什么原理性的东西,就是调用opencv的API启动相机读取图像数据,然后嵌套进ros框架中

#include<iostream>

#include<ros/ros.h>

#include<opencv2/highgui.hpp>
#include<opencv2/imgcodecs.hpp>
#include<opencv2/imgproc.hpp>

#include<std_msgs/Header.h>
#include<cv_bridge/cv_bridge.h>
#include<sensor_msgs/image_encodings.h>
#include<image_transport/image_transport.h>

int main(int argc, char **argv)
{
    /* 节点初始化 */
    ros::init(argc, argv, "usb_cam");
    /* 句柄初始化 */
    ros::NodeHandle nh;
    image_transport::ImageTransport it(nh);

    /* 频率设置 */
    ros::Rate loop_rate(20);

    /* 定义两个发布者 */
    image_transport::Publisher pub_left = it.advertise("/camera/left/image_raw", 20);
    image_transport::Publisher pub_right = it.advertise("/camera/right/image_raw", 20);

    /* 定义图像变量(opencv) */
    cv::Mat imgl, imgr, frame;
    sensor_msgs::ImagePtr msgl, msgr;

    /* 打开相机 */
    std::cout<<"初始化相机"<<std::endl;
    cv::VideoCapture cap(0);
    std::cout<<"完成相机初始化"<<std::endl;
    cap.set(cv::CAP_PROP_FRAME_WIDTH, 2560);
    cap.set(cv::CAP_PROP_FRAME_HEIGHT, 720);
    cap.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'));


    if (!cap.isOpened())
    {
        std::cout<<"相机未打开!"<<std::endl;
        return 0;
    }
    else
    {
        std::cout<<"相机打开!"<<std::endl;
    }
    

    while (nh.ok())
    {
        /* 读取相机视频流 */
        cap.read(frame);
        if (frame.empty())
        {
            std::cout<<"未读取到视频数据"<<std::endl;
            continue;
        }
        
        /* 分割图像 */
        imgl = frame(cv::Rect(0, 0, 1280, 720));
        imgr = frame(cv::Rect(1280, 0, 1280, 720));

        /* opencv转换ros图像数据 */
        msgl = cv_bridge::CvImage(std_msgs::Header(), "bgr8", imgl).toImageMsg();
        msgr = cv_bridge::CvImage(std_msgs::Header(), "bgr8", imgr).toImageMsg();

        /* 发布数据 */
        pub_left.publish(msgl);
        pub_right.publish(msgr);

        ros::spinOnce();
        loop_rate.sleep();
    }
    
    return 0;
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top