Display image in color, and enable saving with 'c' (capture) key
Deploy this (but don't run it) when deploying to the pi's
Change-Id: I21441971970bf391e4b6beed0c2d3175882d3bdc
diff --git a/y2020/vision/viewer.cc b/y2020/vision/viewer.cc
index cd087c7..08409b2 100644
--- a/y2020/vision/viewer.cc
+++ b/y2020/vision/viewer.cc
@@ -6,6 +6,7 @@
#include "aos/events/shm_event_loop.h"
#include "aos/init.h"
+#include "aos/time/time.h"
#include "y2020/vision/sift/sift_generated.h"
#include "y2020/vision/vision_generated.h"
@@ -31,28 +32,32 @@
event_loop.MakeWatcher(
"/camera", [&target_data_map](const CameraImage &image) {
- cv::Mat image_mat(image.rows(), image.cols(), CV_8U);
- CHECK(image_mat.isContinuous());
- const int number_pixels = image.rows() * image.cols();
- for (int i = 0; i < number_pixels; ++i) {
- reinterpret_cast<uint8_t *>(image_mat.data)[i] =
- image.data()->data()[i * 2];
- }
+ // Create color image:
+ cv::Mat image_color_mat(cv::Size(image.cols(), image.rows()), CV_8UC2,
+ (void *)image.data()->data());
+ cv::Mat rgb_image(cv::Size(image.cols(), image.rows()), CV_8UC3);
+ cv::cvtColor(image_color_mat, rgb_image, CV_YUV2BGR_YUYV);
- int64_t timestamp = image.monotonic_timestamp_ns();
+ unsigned long timestamp = image.monotonic_timestamp_ns();
auto target_it = target_data_map.find(timestamp);
if (target_it != target_data_map.end()) {
float x = target_it->second.x;
float y = target_it->second.y;
float radius = target_it->second.radius;
- cv::circle(image_mat, cv::Point2f(x, y), radius, 255, 5);
- } else {
- LOG(INFO) << "Couldn't find timestamp match for timestamp: "
- << timestamp;
+ cv::circle(rgb_image, cv::Point2f(x, y), radius,
+ cv::Scalar(0, 255, 0), 5);
}
- cv::imshow("Display", image_mat);
+
+ cv::imshow("Display", rgb_image);
int keystroke = cv::waitKey(1);
- if ((keystroke & 0xFF) == static_cast<int>('q')) {
+ if ((keystroke & 0xFF) == static_cast<int>('c')) {
+ // Convert again, to get clean image
+ cv::cvtColor(image_color_mat, rgb_image, CV_YUV2BGR_YUYV);
+ std::stringstream name;
+ name << "capture-" << aos::realtime_clock::now() << ".png";
+ cv::imwrite(name.str(), rgb_image);
+ LOG(INFO) << "Saved image file: " << name.str();
+ } else if ((keystroke & 0xFF) == static_cast<int>('q')) {
exit(0);
}
});