Put blob detection results in a struct
Passing around 5 variables got really clunky.
Signed-off-by: Milind Upadhyay <milind.upadhyay@gmail.com>
Change-Id: I27b073635377c344aa02b01a094169ef90aff56e
diff --git a/y2022/vision/camera_reader.cc b/y2022/vision/camera_reader.cc
index e1de75a..db87cb0 100644
--- a/y2022/vision/camera_reader.cc
+++ b/y2022/vision/camera_reader.cc
@@ -1,17 +1,16 @@
#include "y2022/vision/camera_reader.h"
-#include <cmath>
#include <chrono>
+#include <cmath>
#include <thread>
-#include <opencv2/imgproc.hpp>
-
#include "aos/events/event_loop.h"
#include "aos/events/shm_event_loop.h"
#include "aos/flatbuffer_merge.h"
#include "aos/network/team_number.h"
#include "frc971/vision/v4l2_reader.h"
#include "frc971/vision/vision_generated.h"
+#include "opencv2/imgproc.hpp"
#include "y2022/vision/blob_detector.h"
#include "y2022/vision/calibration_generated.h"
#include "y2022/vision/target_estimator.h"
@@ -82,25 +81,23 @@
} // namespace
void CameraReader::ProcessImage(cv::Mat image_mat) {
- // Remember, we're getting YUYV images, so we start by converting to RGB
-
- std::vector<std::vector<cv::Point>> filtered_blobs, unfiltered_blobs;
- std::vector<BlobDetector::BlobStats> blob_stats;
- cv::Mat binarized_image =
+ BlobDetector::BlobResult blob_result;
+ blob_result.binarized_image =
cv::Mat::zeros(cv::Size(image_mat.cols, image_mat.rows), CV_8UC1);
- cv::Point centroid;
- BlobDetector::ExtractBlobs(image_mat, binarized_image, filtered_blobs,
- unfiltered_blobs, blob_stats, centroid);
+ BlobDetector::ExtractBlobs(image_mat, &blob_result);
auto builder = target_estimate_sender_.MakeBuilder();
- flatbuffers::Offset<BlobResult> blob_result_offset;
+ flatbuffers::Offset<BlobResultFbs> blob_result_offset;
{
- const auto filtered_blobs_offset = CvBlobsToFbs(filtered_blobs, builder);
+ const auto filtered_blobs_offset =
+ CvBlobsToFbs(blob_result.filtered_blobs, builder);
const auto unfiltered_blobs_offset =
- CvBlobsToFbs(unfiltered_blobs, builder);
- const auto blob_stats_offset = BlobStatsToFbs(blob_stats, builder);
- const Point centroid_fbs = Point{centroid.x, centroid.y};
+ CvBlobsToFbs(blob_result.unfiltered_blobs, builder);
+ const auto blob_stats_offset =
+ BlobStatsToFbs(blob_result.blob_stats, builder);
+ const Point centroid_fbs =
+ Point{blob_result.centroid.x, blob_result.centroid.y};
- auto blob_result_builder = builder.MakeBuilder<BlobResult>();
+ auto blob_result_builder = builder.MakeBuilder<BlobResultFbs>();
blob_result_builder.add_filtered_blobs(filtered_blobs_offset);
blob_result_builder.add_unfiltered_blobs(unfiltered_blobs_offset);
blob_result_builder.add_blob_stats(blob_stats_offset);
@@ -109,9 +106,9 @@
}
auto target_estimate_builder = builder.MakeBuilder<TargetEstimate>();
- TargetEstimator::EstimateTargetLocation(centroid, CameraIntrinsics(),
- CameraExtrinsics(),
- &target_estimate_builder);
+ TargetEstimator::EstimateTargetLocation(
+ blob_result.centroid, CameraIntrinsics(), CameraExtrinsics(),
+ &target_estimate_builder);
target_estimate_builder.add_blob_result(blob_result_offset);
builder.CheckOk(builder.Send(target_estimate_builder.Finish()));