Fix rectangle colors, attempt to draw rectangle on section #1

Merged
gallant merged 2 commits from karx/freesight:master into master 2023-09-29 12:57:21 -05:00

View file

@ -9,6 +9,7 @@ import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.MatOfRect;
import org.opencv.core.Rect;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.imgproc.Imgproc;
import org.openftc.easyopencv.OpenCvPipeline;
@ -32,7 +33,7 @@ public class FreeSightPipeline extends OpenCvPipeline {
public Scalar lowHSV = new Scalar(0,0,0);
public Scalar highHSV = new Scalar(0,0,0);
public Scalar outline = new Scalar(0,0,0);
public Scalar outline = new Scalar(0,255,0);
public Prop colorState = Prop.NONE;
/**
@ -97,39 +98,54 @@ public class FreeSightPipeline extends OpenCvPipeline {
Imgproc.findContours(scaledThresh, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_NONE);
int index = 0;
int area = 0;
for (int i = 0; i < contours.size(); i++)
{
MatOfPoint bar = contours.get(i);
int foo = bar.width() * bar.height();
if(foo > area)
Mat threshRGB = new Mat();
Imgproc.cvtColor(threshold, threshRGB, Imgproc.COLOR_GRAY2BGR);
if (contours.size() > 0) {
int index = 0;
int area = 0;
for (int i = 0; i < contours.size(); i++)
{
index = i;
area = foo;
MatOfPoint bar = contours.get(i);
int foo = bar.width() * bar.height();
if(foo > area)
{
index = i;
area = foo;
}
}
}
MatOfPoint contour = contours.get(index);
MatOfPoint contour = contours.get(index);
Rect boundingRect = Imgproc.boundingRect(contour);
// center is ( x + w ) / 2
Rect boundingRect = Imgproc.boundingRect(contour);
// center is ( x + w ) / 2
int point = (boundingRect.x + boundingRect.width) / 2;
// int point = (boundingRect.x + boundingRect.width) / 2;
int point = boundingRect.x + boundingRect.width / 2;
Imgproc.rectangle(
threshold,
boundingRect,
outline
);
Imgproc.rectangle(
threshRGB,
boundingRect,
outline
);
if(point < width / 3)
positionState = Side.LEFT;
else if(point > width / 1.5)
positionState = Side.RIGHT;
else
positionState = Side.MIDDLE;
int bigX;
if(point < width / 3) {
positionState = Side.LEFT;
bigX = 0;
}
else if(point > width / 1.5) {
positionState = Side.RIGHT;
bigX = width * 2 / 3;
}
else {
positionState = Side.MIDDLE;
bigX = width / 3;
}
Imgproc.rectangle(threshRGB, new Rect(bigX, 0, width / 3, height), outline);
Imgproc.circle(threshRGB, new Point(boundingRect.x + boundingRect.width / 2, boundingRect.y + boundingRect.height / 2), 10, outline);
Imgproc.putText(threshRGB, positionState.toString(), new Point(boundingRect.x + boundingRect.width / 2, boundingRect.y + boundingRect.height / 2), Imgproc.FONT_ITALIC, 0.5, new Scalar(255, 0, 255));
}
//list of frames to reduce inconsistency, not too many so that it is still real-time, change the number from 5 if you want
if (frameList.size() > 5) {
@ -142,7 +158,8 @@ public class FreeSightPipeline extends OpenCvPipeline {
scaledMask.release();
mat.release();
masked.release();
return threshold;
threshold.release();
return threshRGB;
}
}