2

我是 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并在之后尝试降低帧速率)?

4

1 回答 1

1

每当发布者发布消息时,您使用的回调只是通过 ROS 接收消息,因此从这个角度来看,实际上无法降低帧速率。您可以选择丢弃每个帧数,但这可能不是您想要的,因为这样您就会丢失数据。如果这您要查找的内容,只需在函数中添加某种计数器,并且仅在计数器等于某个值时才获取图像。

解决方案是降低发布者中的帧速率。在不知道发布内容的情况下很难给出执行此操作的说明。但通常这是一些相机驱动程序(即 OpenNI 或 Freenect),在这种情况下,您应该使用上面的丢帧方法。如果消息是从 ROS bag 文件发布的,只需在 rosbag 命令的末尾添加 -r 0.5 即可将发布速率降低到记录时的一半。

-蒂姆

于 2013-12-17T05:08:29.407 回答