diff --git a/Main/chameleon-vision.iml b/Main/chameleon-vision.iml index 3cf03f6f6..7a7dd6957 100644 --- a/Main/chameleon-vision.iml +++ b/Main/chameleon-vision.iml @@ -15,6 +15,12 @@ + + + + + + diff --git a/Main/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2d.java b/Main/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2d.java index 0c62abac1..e9645a2f0 100644 --- a/Main/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2d.java +++ b/Main/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2d.java @@ -35,6 +35,9 @@ public class CVPipeline2d extends CVPipeline { private final int blurSize; + private Mat processBuffer = new Mat(); private Mat outputMat = new Mat(); public BlurPipe(int blurSize) { @@ -17,13 +18,18 @@ public class BlurPipe implements Pipe { public Pair run(Mat input) { long processStartNanos = System.nanoTime(); + // TODO (HIGH) make this blur + input.copyTo(processBuffer); // if (blurSize > 0) { // Imgproc.blur(outputMat, outputMat, new Size(blurSize, blurSize)); // } + processBuffer.copyTo(outputMat); + long processTime = processStartNanos - System.nanoTime(); Pair output = Pair.of(outputMat, processTime); - outputMat.release(); + processBuffer.release(); + return output; } } diff --git a/Main/src/main/java/com/chameleonvision/vision/pipeline/pipes/ErodeDilatePipe.java b/Main/src/main/java/com/chameleonvision/vision/pipeline/pipes/ErodeDilatePipe.java index 06b04357b..e0e86641c 100644 --- a/Main/src/main/java/com/chameleonvision/vision/pipeline/pipes/ErodeDilatePipe.java +++ b/Main/src/main/java/com/chameleonvision/vision/pipeline/pipes/ErodeDilatePipe.java @@ -10,6 +10,7 @@ public class ErodeDilatePipe implements Pipe { private final boolean erode, dilate; private final Mat kernel; + private Mat processBuffer = new Mat(); private Mat outputMat = new Mat(); public ErodeDilatePipe(boolean erode, boolean dilate, int kernelSize) { @@ -23,16 +24,22 @@ public class ErodeDilatePipe implements Pipe { long processStartNanos = System.nanoTime(); if (erode) { - Imgproc.erode(outputMat, outputMat, kernel); + Imgproc.erode(input, processBuffer, kernel); } if (dilate) { - Imgproc.erode(outputMat, outputMat, kernel); + Imgproc.erode(processBuffer, processBuffer, kernel); + } + + if(!erode && !dilate) { + input.copyTo(processBuffer); } long processTime = processStartNanos - System.nanoTime(); + processBuffer.copyTo(outputMat); Pair output = Pair.of(outputMat, processTime); - outputMat.release(); + + processBuffer.release(); return output; } } diff --git a/Main/src/main/java/com/chameleonvision/vision/pipeline/pipes/HsvPipe.java b/Main/src/main/java/com/chameleonvision/vision/pipeline/pipes/HsvPipe.java index 490930d0a..058a4bb62 100644 --- a/Main/src/main/java/com/chameleonvision/vision/pipeline/pipes/HsvPipe.java +++ b/Main/src/main/java/com/chameleonvision/vision/pipeline/pipes/HsvPipe.java @@ -10,6 +10,7 @@ public class HsvPipe implements Pipe { private final Scalar hsvLower, hsvUpper; + private Mat processBuffer = new Mat(); private Mat outputMat = new Mat(); public HsvPipe(Scalar hsvLower, Scalar hsvUpper) { @@ -21,13 +22,18 @@ public class HsvPipe implements Pipe { public Pair run(Mat input) { long processStartNanos = System.nanoTime(); - Imgproc.cvtColor(input, outputMat, Imgproc.COLOR_RGB2HSV, 3); + // convert from rgb to hsv + if(input.empty()) { + throw new RuntimeException("HSV input cannot be empty!"); + } + Imgproc.cvtColor(input, processBuffer, Imgproc.COLOR_RGB2HSV, 3); - Core.inRange(outputMat, hsvLower, hsvUpper, outputMat); + Core.inRange(processBuffer, hsvLower, hsvUpper, processBuffer); long processTime = processStartNanos - System.nanoTime(); + processBuffer.copyTo(outputMat); Pair output = Pair.of(outputMat, processTime); - outputMat.release(); + processBuffer.release(); return output; } } diff --git a/Main/src/main/java/com/chameleonvision/vision/pipeline/pipes/RotateFlipPipe.java b/Main/src/main/java/com/chameleonvision/vision/pipeline/pipes/RotateFlipPipe.java index 9f4ba8b53..03a67ccdd 100644 --- a/Main/src/main/java/com/chameleonvision/vision/pipeline/pipes/RotateFlipPipe.java +++ b/Main/src/main/java/com/chameleonvision/vision/pipeline/pipes/RotateFlipPipe.java @@ -11,6 +11,7 @@ public class RotateFlipPipe implements Pipe { private final ImageRotation rotation; private final ImageFlipMode flip; + private Mat processBuffer = new Mat(); private Mat outputMat = new Mat(); public RotateFlipPipe(ImageRotation rotation, ImageFlipMode flip) { @@ -22,12 +23,13 @@ public class RotateFlipPipe implements Pipe { public Pair run(Mat input) { long processStartNanos = System.nanoTime(); - Core.flip(input, outputMat, flip.value); - Core.rotate(outputMat, outputMat, rotation.value); + Core.flip(input, processBuffer, flip.value); + Core.rotate(processBuffer, processBuffer, rotation.value); long processTime = processStartNanos - System.nanoTime(); + processBuffer.copyTo(outputMat); Pair output = Pair.of(outputMat, processTime); - outputMat.release(); + processBuffer.release(); return output; } }