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ましたが、そのアプローチは失敗します。

CvCaptureで使用することは可能ですIplImageか (つまり、IplImage ipl_img= cv_ptr->image後でフレームレートを下げようとすると)?

4

1 に答える 1

1

使用しているコールバックは、パブリッシャーがメッセージを発行するたびに ROS 経由でメッセージを受信するだけなので、この観点から実際にフレーム レートを下げる方法はありません。すべてのフレーム数をドロップすることを選択できますが、データが失われるだけなので、これはおそらく探しているものではありません。これ探しているものである場合は、関数にある種のカウンターを追加し、カウンターが何らかの値に等しい場合にのみ画像を取得します。

解決策は、パブリッシャーのフレーム レートを下げることです。何がパブリッシュされているかを知らずにこれを実行するための指示を出すのは困難です..しかし、通常、これは何らかのカメラ ドライバー (つまり、OpenNI または Freenect) のいずれかであり、その場合は上からドロップ フレーム アプローチを使用する必要があります。メッセージが ROS バッグ ファイルからパブリッシュされている場合は、rosbag コマンドの末尾に -r 0.5 を追加するだけで、パブリッシュ レートが記録されたときの半分に減少します。

-ティム

于 2013-12-17T05:08:29.407 に答える