2013-07-30 99 views
2

我是Opencv和ROS的新手。我有以下代码:如何降低从ros导入的opencv图像的帧速率

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并尝试降低帧速率)?

回答

0

只要发布者发布消息,您正在使用的回调只会通过ROS接收消息,因此无法从此角度实际降低帧速率。您可以选择放弃每一帧数,但这可能不是您要查找的内容,因为您将丢失数据。如果这个你在找什么,只需添加一些计数器的功能,只有抓住图像,如果计数器等于某个值。

解决方法是降低发行商的帧速率。在不知道发布内容的情况下很难给出指示。但通常这是一些摄像头驱动程序(即OpenNI或Freenect),在这种情况下,您应该采用上面的丢帧方法。如果消息是从ROS包文件发布的,只需在rosbag命令的末尾添加-r 0.5即可将发布速率降低到一半。

-Tim