subscribe to image at regular time intervals
ROS indigo OpenCV
Hi, I am writing an image subscriber and i want to use this to get some 10 images and then stop and repeat this again when I call it again. For this I have written subscriber as follows,
class SubscriberImage
{
private:
ros::NodeHandle nh;
image_transport::Subscriber sub;
// ...//
public:
int perform(std::string topic)
{
cv::namedWindow("view");
cv::startWindowThread();
image_transport::ImageTransport it(nh);
sub = it.subscribe(topic, 1, &SubscriberImage::imageCallback,this, image_transport::TransportHints("theora"));
while(num < 10)
ros::spinOnce();
cv::destroyWindow("view");
return 0;
}
void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{
**/* Here I am saving 10 images to disk */**
try
{
if (num < 10 && !cv_bridge::toCvShare(msg, "bgr8")->image.empty())
{
cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image);
cv::imwrite(name,cv_bridge::toCvShare(msg, "bgr8")->image);
}
else if(cv_bridge::toCvShare(msg, "bgr8")->image.empty())
{
ROS_INFO_STREAM("Debug: camera image is empty");
}
else if(num >= 10)
{
sub.shutdown();
}
}
}
};
I am creating an object for this class in another node and whenever I call perform(), a new subscriber object is created and in call back i save 10 images to disk. After that I am calling sub.shutdown(). Everything works as expected but one problem is I am creating a new subscriber object every time and calling shutdown() after saving 10 images. Thus creating a new subscriber object every time takes sometime. I don't this wait time.
Can this be done in a better way? Please guide me in this.
Thanks