2013-07-30 8 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 bag 파일에서 게시되는 경우, rosbag 명령의 끝에 -r 0.5를 추가하여 게시 속도를 기록 된 값의 절반으로 줄이십시오.

-imim