File size: 3,118 Bytes
9375c9a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
// Copyright (C) 2011 Davis E. King ([email protected])
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_METADATA_EdITOR_H__
#define DLIB_METADATA_EdITOR_H__
#include <dlib/gui_widgets.h>
#include <dlib/data_io.h>
#include <dlib/pixel.h>
#include <map>
// ----------------------------------------------------------------------------------------
class color_mapper
{
public:
dlib::rgb_alpha_pixel operator() (
const std::string& str
)
{
auto i = colors.find(str);
if (i != colors.end())
{
return i->second;
}
else
{
using namespace dlib;
hsi_pixel pix;
pix.h = reverse(colors.size());
pix.s = 255;
pix.i = 150;
rgb_alpha_pixel result;
assign_pixel(result, pix);
colors[str] = result;
return result;
}
}
private:
// We use a bit reverse here because it causes us to evenly spread the colors as we
// allocated them. First the colors are maximally different, then become interleaved
// and progressively more similar as they are allocated.
unsigned char reverse(unsigned char b)
{
// reverse the order of the bits in b.
b = ((b * 0x0802LU & 0x22110LU) | (b * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
return b;
}
std::map<std::string, dlib::rgb_alpha_pixel> colors;
};
// ----------------------------------------------------------------------------------------
class metadata_editor : public dlib::drawable_window
{
public:
metadata_editor(
const std::string& filename_
);
~metadata_editor();
void add_labelable_part_name (
const std::string& name
);
private:
void file_save();
void file_save_as();
void remove_selected_images();
virtual void on_window_resized();
virtual void on_keydown (
unsigned long key,
bool is_printable,
unsigned long state
);
void on_lb_images_clicked(unsigned long idx);
void select_image(unsigned long idx);
void save_metadata_to_file (const std::string& file);
void load_image(unsigned long idx);
void load_image_and_set_size(unsigned long idx);
void on_image_clicked(const dlib::point& p, bool is_double_click, unsigned long btn);
void on_overlay_rects_changed();
void on_overlay_label_changed();
void on_overlay_rect_selected(const dlib::image_display::overlay_rect& orect);
void display_about();
std::string filename;
dlib::image_dataset_metadata::dataset metadata;
dlib::menu_bar mbar;
dlib::list_box lb_images;
unsigned long image_pos;
dlib::image_display display;
dlib::label overlay_label_name;
dlib::text_field overlay_label;
unsigned long keyboard_jump_pos;
time_t last_keyboard_jump_pos_update;
bool display_equialized_image = false;
color_mapper string_to_color;
};
// ----------------------------------------------------------------------------------------
#endif // DLIB_METADATA_EdITOR_H__
|