如何降低从ros导入的opencv图像的帧速率

时间:2013-07-30 16:12:13

标签: opencv frame rate ros

我是Opencv和ROS的新手。我有以下代码:

void visual_image_cb(const sensor_msg::ImageConstPtr& msg)
{
    ctr++;
    cv_bridge::CvImagePtr cv_ptr;
    try
    {
        cv_ptr=cv_bridge::toCvCopy(msg, enc::BGR8);
    }
    catch (cv_bridge:Exception& e)
    {
        ROS_ERROr("cv_bridge exception: %s", e.what());
        return;
    }
...

如何降低cv_ptr的帧速率?我尝试使用cvQueryFrame,但这种方法失败了。

是否可以将CvCaptureIplImage一起使用(例如,如果我使用IplImage ipl_img= cv_ptr->image并尝试降低之后的帧速率)?

1 个答案:

答案 0 :(得分:0)

当发布者发布消息时,您正在使用的回调只是通过ROS接收消息,因此从这个角度来看无法实际降低帧速率。您可以选择删除每个帧数,但这可能不是您正在寻找的,因为您将丢失数据。如果 你正在寻找什么,只需在函数中添加某种计数器,只有在计数器等于某个值时才抓取图像。

解决方案是降低发布者的帧速率。在不知道发布什么的情况下很难给出这样做的说明。但通常这是一些相机驱动程序(即OpenNI或Freenect),在这种情况下你应该采用上面的丢帧方法。如果消息是从ROS包文件发布的,只需在rosbag命令的末尾添加-r 0.5,以将发布速率降低到记录的一半。

-Tim