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;
}
}