使用ROS调用USB视频采集卡并进行图片存储

记录自己基于ubuntu20.04与ROS Noetic进行视频读取。

第一步——插拔USB采集卡,查看摄像头接口

先不插采集卡,打开终端,输入命令:

ls /dev/video*

得到如下所示:

插上采集卡后,再次执行上一个命令,得到如下所示:

我的多出来的是/dev/video2,根据自己情况来,记住这个接口号。

第二步——安装USB_CAM

先下载该包并进行编译:

cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ..
catkin_make

也可以直接使用如下命令(注意使用时要去ROS的对应目录下去寻找):

sudo apt-get install ros-noetic-usb-cam

 第三步——修改对应的launch文件:

在usb_cam/launch下,修改usb_cam.launch,根据自己的号码修改:

第四步——测试

cd catkin_ws/src
source /devel/setup.bash
roslaunch usb_cam usb_cam.launch

成功获取到超声视频信息:

第五步——对源代码简单修改,自动保存当前图像

找到usb_cam/src,对usb_cam_node.cpp文件进行修改:

#include <ros/ros.h>
#include "usb_cam/usb_cam.h"
#include <sensor_msgs/Image.h>
#include <cv_bridge/cv_bridge.h>
#include <opencv2/highgui/highgui.hpp>

// 回调函数,用于处理图像消息
void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{
    // 将 ROS 图像消息转换为 OpenCV 图像格式
    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;
    }

    // 保存图片并定义保存位置位置
    cv::imwrite("/home/lwc/image.jpg", cv_ptr->image);
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "usb_cam");
    usb_cam::UsbCam& camera = usb_cam::UsbCam::Instance();
     // 创建 ROS 节点句柄
    ros::NodeHandle nh;

    // 创建图像消息订阅者,订阅 usb_cam/image_raw 话题
    ros::Subscriber image_sub = nh.subscribe("usb_cam/image_raw", 1, imageCallback);

    // 创建定时器,每隔两秒触发一次回调函数
    ros::Timer timer = nh.createTimer(ros::Duration(2.0), [](const ros::TimerEvent& event) {
        ROS_INFO("Saving image...");
    });
    ros::spin();
    return 0;
}

可以看到成功保存了图片:

如图:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值