/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package ijopencv.opencv; import ij.gui.Line; import ij.gui.OvalRoi; import static java.lang.Math.cos; import static java.lang.Math.sin; import java.util.ArrayList; import java.util.List; import org.bytedeco.javacpp.opencv_core; import org.bytedeco.javacpp.opencv_core.Mat; import static org.bytedeco.javacpp.opencv_core.cvRound; import static org.bytedeco.javacpp.opencv_core.split; import org.scijava.Prioritized; import org.scijava.Priority; import org.scijava.convert.AbstractConverter; import org.scijava.convert.Converter; import org.scijava.log.LogService; import org.scijava.plugin.Plugin; @Plugin(type = Converter.class, priority = Priority.LOW_PRIORITY) public class MatListOvalRoiConverter extends AbstractConverter<Mat, List<OvalRoi>> { @Override public int compareTo(Prioritized o) { return super.compareTo(o); } @Override public LogService log() { return super.log(); } @Override public String getIdentifier() { return super.getIdentifier(); } @Override public < T> T convert(Object o, Class< T> type) { Mat circles = (Mat) o; opencv_core.MatVector xyr = new opencv_core.MatVector(3); split(circles, xyr); int num = circles.size().height(); ArrayList<OvalRoi> result = new ArrayList<OvalRoi>(); for (int i = 0; i < num; i++) { int cx = (int) xyr.get(0).getFloatBuffer().get(i); int cy = (int) xyr.get(1).getFloatBuffer().get(i); int r = (int) xyr.get(2).getFloatBuffer().get(i); OvalRoi or = new OvalRoi(cx - r, cy - r, r * 2, r * 2); result.add(or); } return (T) result; } @Override public Class< List<OvalRoi>> getOutputType() { return (Class<List<OvalRoi>>) (Object) List.class; } @Override public Class< opencv_core.Mat> getInputType() { return opencv_core.Mat.class; } }