package org.myrobotlab.opencv;
import static org.bytedeco.javacpp.opencv_imgcodecs.cvLoadImage;
import java.util.HashMap;
import org.bytedeco.javacpp.opencv_core.IplImage;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.myrobotlab.logging.LoggerFactory;
import org.slf4j.Logger;
public class ImageFileFrameGrabber extends FrameGrabber {
public final static Logger log = LoggerFactory.getLogger(ImageFileFrameGrabber.class.getCanonicalName());
transient private IplImage image;
transient private IplImage lastImage;
transient private HashMap<String, IplImage> cache = new HashMap<String, IplImage>();
private int frameCounter = 0;
public String path;
transient OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();
public ImageFileFrameGrabber(String path) {
this.path = path;
}
@Override
public Frame grab() {
if (!cache.containsKey(path)) {
image = cvLoadImage(path);
cache.put(path, image);
} else {
image = cache.get(path).clone();
}
++frameCounter;
if (frameCounter > 1) {
lastImage.release();
}
lastImage = image;
return converter.convert(image);
}
@Override
public void release() throws Exception {
}
@Override
public void start() {
}
@Override
public void stop() {
}
@Override
public void trigger() throws Exception {
}
}