/** Returns {@code this} where {@code n[offset:offset + length] = array/buffer[index(indices)]} */ public abstract IntIndexer get(long[] indices, int[] n, int offset, int length);
/** Returns {@code this} where {@code n[offset:offset + length] = array/buffer[i]} */ public abstract IntIndexer get(long i, int[] n, int offset, int length); /** Returns {@code array/buffer[i * strides[0] + j]} */
/** Returns {@code this} where {@code n[offset:offset + length] = array/buffer[i * strides[0] + j]} */ public abstract IntIndexer get(long i, long j, int[] n, int offset, int length); /** Returns {@code array/buffer[i * strides[0] + j * strides[1] + k]} */
@Override public double getDouble(long... indices) { return get(indices); } @Override public IntIndexer putDouble(long[] indices, double n) { return put(indices, (int)n); }
@Override public double getDouble(long i) { if (indexer == null) { throw new IllegalStateException("Indexer must never be null"); } if (dataType() == Type.FLOAT) { return ((FloatIndexer) indexer).get(offset() + i); } else if (dataType() == Type.INT) { return ((IntIndexer) indexer).get(offset() + i); } else if (dataType() == Type.LONG) { return ((LongRawIndexer) indexer).get(offset() + i); } else { return ((DoubleIndexer) indexer).get(offset() + i); } }
@Override public int getInt(long i) { if (dataType() == Type.DOUBLE) { return (int) ((DoubleIndexer) indexer).get(offset() + i); } else if (dataType() == Type.INT) { return ((IntIndexer) indexer).get(offset() + i); } else if (dataType() == Type.LONG) { return (int) ((LongIndexer) indexer).get(offset() + i); } else { return (int) ((FloatIndexer) indexer).get(offset() + i); } }
@Override public long getLong(long i) { if (dataType() == Type.FLOAT) { return (long) ((FloatIndexer) indexer).get(offset() + i); } else if (dataType() == Type.INT) { return (long) ((IntIndexer) indexer).get(offset() + i); } else if (dataType() == Type.DOUBLE) { return (long) ((DoubleIndexer) indexer).get(offset() + i); } else { return ((LongIndexer) indexer).get(offset() + i); } }
@Override public float getFloat(long i) { if (dataType() == Type.DOUBLE) { return (float) ((DoubleIndexer) indexer).get(offset() + i); } else if (dataType() == Type.INT) { return ((IntIndexer) indexer).get(offset() + i); } else if (dataType() == Type.LONG) { return ((LongRawIndexer) indexer).get(offset() + i); } else if (dataType() == Type.HALF) { return ((HalfIndexer) indexer).get(offset() + i); } else { return ((FloatIndexer) indexer).get(offset() + i); } }
import org.bytedeco.javacpp.indexer.*; import static org.bytedeco.javacpp.opencv_core.*; import static org.bytedeco.javacpp.opencv_imgproc.*; import static org.bytedeco.javacpp.opencv_highgui.*; public class Contours { public static void main(String[] args) { Mat grayscaleImage = imread("lena.png", CV_LOAD_IMAGE_GRAYSCALE); Mat binarizedImage = new Mat(); MatVector contours = new MatVector(); threshold(grayscaleImage, binarizedImage, 128, 255, THRESH_BINARY); findContours(binarizedImage, contours, RETR_LIST, CHAIN_APPROX_NONE); int contoursSize = (int)contours.size(); System.out.println("size = " + contoursSize); for (int contourIdx = 0; contourIdx < contoursSize; contourIdx++) { // compute center float x = 0, y = 0; Mat contour = contours.get(contourIdx); IntIndexer points = contour.createIndexer(false); int pointsSize = contour.rows(); for (int pointIdx = 0; pointIdx < pointsSize; pointIdx++) { x += points.get(pointIdx, 0); y += points.get(pointIdx, 1); } System.out.println("center = (" + x / pointsSize + ", " + y / pointsSize + ")"); } } }