Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 1 | #ifndef _AOS_VISION_BLOB_STREAM_VIEW_H_ |
| 2 | #define _AOS_VISION_BLOB_STREAM_VIEW_H_ |
| 3 | |
| 4 | #include "aos/vision/blob/range_image.h" |
| 5 | #include "aos/vision/debug/debug_viewer.h" |
| 6 | #include "aos/vision/image/image_types.h" |
| 7 | |
| 8 | #include <memory> |
| 9 | |
| 10 | namespace aos { |
| 11 | namespace vision { |
| 12 | |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 13 | class BlobStreamViewer : public DebugViewer { |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 14 | public: |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 15 | BlobStreamViewer() : DebugViewer(false) {} |
| 16 | explicit BlobStreamViewer(bool flip) : DebugViewer(flip) {} |
| 17 | |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 18 | void Submit(ImageFormat fmt, const BlobList &blob_list) { |
| 19 | SetFormatAndClear(fmt); |
| 20 | DrawBlobList(blob_list, {255, 255, 255}); |
| 21 | } |
| 22 | |
| 23 | inline void SetFormatAndClear(ImageFormat fmt) { |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 24 | if (!image_.fmt().Equals(fmt)) { |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 25 | printf("resizing data: %d, %d\n", fmt.w, fmt.h); |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 26 | image_ = ImageValue(fmt); |
| 27 | UpdateImage(image_.get()); |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 28 | } |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 29 | memset(image_.data(), 0, fmt.ImgSize() * sizeof(PixelRef)); |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 30 | } |
| 31 | |
| 32 | inline void DrawBlobList(const BlobList &blob_list, PixelRef color) { |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 33 | ImagePtr ptr = img(); |
| 34 | for (const RangeImage &blob : blob_list) { |
| 35 | for (int i = 0; i < (int)blob.ranges().size(); ++i) { |
| 36 | for (const auto &range : blob.ranges()[i]) { |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 37 | for (int j = range.st; j < range.ed; ++j) { |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 38 | ptr.get_px(j, i + blob.min_y()) = color; |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 39 | } |
| 40 | } |
| 41 | } |
| 42 | } |
| 43 | } |
| 44 | |
| 45 | inline void DrawSecondBlobList(const BlobList &blob_list, PixelRef color1, |
| 46 | PixelRef color2) { |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 47 | ImagePtr ptr = img(); |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 48 | for (const auto &blob : blob_list) { |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 49 | for (int i = 0; i < (int)blob.ranges().size(); ++i) { |
| 50 | for (const auto &range : blob.ranges()[i]) { |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 51 | for (int j = range.st; j < range.ed; ++j) { |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 52 | auto px = ptr.get_px(j, i + blob.min_y()); |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 53 | if (px.r == 0 && px.g == 0 && px.b == 0) { |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 54 | ptr.get_px(j, i + blob.min_y()) = color1; |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 55 | } else { |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 56 | ptr.get_px(j, i + blob.min_y()) = color2; |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 57 | } |
| 58 | } |
| 59 | } |
| 60 | } |
| 61 | } |
| 62 | } |
| 63 | |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 64 | // Backwards compatible. |
| 65 | DebugViewer *view() { return this; } |
| 66 | |
| 67 | ImagePtr img() { return image_.get(); } |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 68 | |
| 69 | private: |
Parker Schuh | d7db83d | 2017-02-08 20:49:15 -0800 | [diff] [blame^] | 70 | ImageValue image_; |
Parker Schuh | 6691f19 | 2017-01-14 17:01:02 -0800 | [diff] [blame] | 71 | }; |
| 72 | |
| 73 | } // namespace vision |
| 74 | } // namespace aos |
| 75 | |
| 76 | #endif // _AOS_VISION_BLOB_STREAM_VIEW_H_ |