ImageD  v2_7_5 (24.06.22)
ImageD is an image processing software designed for rapid prototyping and implementing algorithms and solutions for science, research and teaching.
d_viewer_img.h
Go to the documentation of this file.
1 #ifndef D_VIEWER_IMG_H
2 #define D_VIEWER_IMG_H
3 
4 //own
5 #include <d_enum.h>
6 #include <scenemousetrack.h>
7 #include <d_img_proc.h>
8 #include <d_error_handler.h>
9 
10 //general
11 #include <iostream>
12 #include <vector>
13 
14 //Qt
15 #include <QObject>
16 #include <QImage>
17 #include <QPixmap>
18 #include <QGraphicsScene>
19 #include <QGraphicsView>
20 #include <QString>
21 #include <QDebug>
22 #include <QMessageBox>
23 #include <QFileDialog>
24 #include <QFileInfo>
25 #include <QDir>
26 #include <QElapsedTimer>
27 
28 //Qt-Charts
29 
30 //openCV
31 #include <opencv2/core/core.hpp>
32 #include <opencv2/highgui/highgui.hpp>
33 #include <opencv2/imgproc/imgproc.hpp>
34 
35 //namespaces
36 using namespace std;
37 using namespace cv;
38 
39 class D_Viewer_Img : public QGraphicsView
40 {
41  Q_OBJECT
42 
43 public:
44  D_Viewer_Img();
45 
46  //setter
47  void set_Name(QString viewer_name) {QS_Name = viewer_name;}
48  void clear_Image();
49 
50  //get pointers to members
51  Mat *MA() {return &MA_View;}
52  QImage *QI() {return &QI_View;}
53  QPixmap *PX() {return &PX_View;}
54  SceneMouseTrack *SC() {return &SC_View;}
55 
56  //image attributes
57  QString Type_MA() {return D_Img_Proc::Type_of_Mat(&MA_View);}
58  QString Type_QI() {return D_Img_Proc::Type_of_QImage(&QI_View);}
59  int img_width() {return MA_View.cols;}
60  int img_height() {return MA_View.rows;}
61  double img_val_min();
62  double img_val_max();
63  double img_val_range();
64 
65  //view attributes
66  double scale_f_x() {return scale_x;}
67  double scale_f_y() {return scale_y;}
68 
69 private:
70  void Init ();
71 
72  //Processing image->view
73  void Proc_MA_2_QI ();
74  void Proc_QI_2_PX ();
75  void Proc_PX_Scale ();
76  void Proc_PX_2_SC ();
77 
78  //check if mouse is over image
79  bool Is_MouseOverScene (int x, int y);
80 
81  //Error Handling
82  D_Error_Handler ER;
83  void ERR (int err, QString func = "not specified", QString detail = "not specified");
84 
85 public slots:
86 
87  //Update image/view
88  void Set_Image (Mat *MA_new);
89  void Update_Image (Mat *MA_new);
90  void Update_Image ();
91  void Update_View ();
92 
93  //save image
94  QString Save_Image_Dialog ();
95  QString Save_Image_Dialog (QString path_default);
96  QString Save_Image ();
97  QString Save_Image (QString path);
98 
99  //Viewer options
100  void Set_Transformation_Mode (bool smooth);
101  void Set_Aspect_Mode (bool keep);
102  void Set_GammaSpread (int gammaspread = 1) {gs_active = (bool) gammaspread; Proc_MA_2_QI();}
103  void Set_Gamma (double gamma = 1) {gs_gamma = gamma; Proc_MA_2_QI();}
104  void Set_SpreadInMin (double spread_min = 0) {gs_in_min = spread_min; Proc_MA_2_QI();}
105  void Set_SpreadInMax (double spread_max = 255) {gs_in_max = spread_max; Proc_MA_2_QI();}
106  void Set_SpreadOutMin (double spread_min = 0) {gs_out_min = spread_min; Proc_MA_2_QI();}
107  void Set_SpreadOutMax (double spread_max = 255) {gs_out_max = spread_max; Proc_MA_2_QI();}
108  void Set_Zomm (int x, int y, double factor);
109 
110  //slots recieved on actions in scene
111  void MouseMoved (int x, int y);
112  void MouseClicked (int x, int y);
113  void MouseScrolled (int x, int y, int delta);
114  void MouseScrolled_Ctrl (int x, int y, int delta);
115 
116  //zoom
117  void Update_Zoom();
118 
119 signals:
120 
121  //mouse event
122  void MouseMoved ();
123  void MouseMoved_Pos (int x, int y);
124  void MouseMoved_Pos (QString pos);
125  void MouseMoved_Value (vector<double> val);
126  void MouseMoved_Value (QString val);
127  void MouseClicked ();
128  void MouseClicked_Pos (int x, int y);
129  void MouseClicked_Pos (QString pos);
130  void MouseClicked_Value (vector<double> val);
131  void MouseClicked_Value (QString val);
132 
133  //image event
134  void TypeChanged ();
135  void TypeChanged_QI ();
136  void TypeChanged_QI (QString type);
137  void TypeChanged_MA ();
138  void TypeChanged_MA (QString type);
140  void Image_Size_Changed (int width, int height);
141  void Image_Size_Changed (QString size);
142 
143  //view event
144  void View_Updated ();
145  void Scaled ();
146  void Scaled_Factor (double f_x, double f_y);
147  void Scaled_Factor (QString scale);
148  void Scaled_Factor_Prz (QString scale_prz);
149  void Zoomed (int x, int y, double factor);
150 
151  //times
152  void Time_View_Update (unsigned int time_ms);
153  void Time_Image_Cvt (unsigned int time_ms);
154 
155  //saved
156  void Image_Saved ();
157  void Image_Saved (QString path);
158 
159 private:
160  //basic elements
161  Mat MA_View;
162  Mat MA_View_GS;
163  QImage QI_View;
164  QPixmap PX_View;
165  SceneMouseTrack SC_View;
166  QGraphicsView *GV_View;
167 
168  //paths
169  QDir DIR_Default;
170  QFileInfo FI_LastSaved;
171 
172  //view attributes
173  bool scale;
174  double scale_x;
175  double scale_y;
176 
177  Qt::TransformationMode TransMode;
178  Qt::AspectRatioMode AspectMode;
179 
180  bool zoom_active;
181  int zoom_at_x = 0;
182  int zoom_at_y = 0;
183  double zoom_factor = 1.00;
184  double zoom_step = 0.25;
185 
186  bool gs_active = false;
187  double gs_gamma = 1;
188  double gs_in_min = 0;
189  double gs_in_max = 255;
190  double gs_out_min = 0;
191  double gs_out_max = 255;
192 
193  //other
194  QString QS_Name = "Viewer";
195 
196  //times
197  QElapsedTimer QET_view;
198  unsigned int time_view;
199  QElapsedTimer QET_convert;
200  unsigned int time_convert;
201 };
202 
203 #endif // D_VIEWER_IMG_H
Mat
cv::Mat Mat
Definition: d_opencv_typedefs.h:28
D_Viewer_Img::Set_SpreadInMin
void Set_SpreadInMin(double spread_min=0)
Definition: d_viewer_img.h:104
D_Viewer_Img::Update_View
void Update_View()
Definition: d_viewer_img.cpp:193
D_Img_Proc::Type_of_Mat
static QString Type_of_Mat(Mat *pMA_In)
Definition: d_img_proc.cpp:363
D_Viewer_Img::MouseClicked_Value
void MouseClicked_Value(QString val)
D_Viewer_Img::Set_Aspect_Mode
void Set_Aspect_Mode(bool keep)
Definition: d_viewer_img.cpp:270
D_Img_Proc::GammaSpread
static int GammaSpread(Mat *pMA_Out, Mat *pMA_In, double gamma, double in_min, double in_max, double out_min=0, double out_max=255, bool force_8bit=false)
Definition: d_img_proc.cpp:4903
D_Viewer_Img::MouseMoved_Value
void MouseMoved_Value(QString val)
D_Viewer_Img::Image_Size_Changed
void Image_Size_Changed(QString size)
D_Viewer_Img::Update_Zoom
void Update_Zoom()
Definition: d_viewer_img.cpp:391
D_Viewer_Img::Save_Image
QString Save_Image()
Definition: d_viewer_img.cpp:241
D_Viewer_Img::Time_Image_Cvt
void Time_Image_Cvt(unsigned int time_ms)
D_Viewer_Img::img_height
int img_height()
Definition: d_viewer_img.h:60
D_Viewer_Img::View_Updated
void View_Updated()
scenemousetrack.h
D_Viewer_Img::Scaled_Factor
void Scaled_Factor(double f_x, double f_y)
D_Viewer_Img::Set_Gamma
void Set_Gamma(double gamma=1)
Definition: d_viewer_img.h:103
d_viewer_img.h
D_Viewer_Img
Definition: d_viewer_img.h:40
D_Error_Handler::ERR
void ERR(int err, QString sender, QString func, QString detail)
D_Error_Handler::ERR pops an error message if an error occured and/or streams it to a csv file.
Definition: d_error_handler.cpp:23
D_Viewer_Img::set_Name
void set_Name(QString viewer_name)
Definition: d_viewer_img.h:47
D_Viewer_Img::MouseClicked
void MouseClicked()
D_Viewer_Img::MouseClicked_Pos
void MouseClicked_Pos(int x, int y)
D_Viewer_Img::PX
QPixmap * PX()
Definition: d_viewer_img.h:53
D_Viewer_Img::Set_SpreadOutMax
void Set_SpreadOutMax(double spread_max=255)
Definition: d_viewer_img.h:107
D_Viewer_Img::Image_Saved
void Image_Saved()
D_Viewer_Img::Scaled_Factor_Prz
void Scaled_Factor_Prz(QString scale_prz)
D_Viewer_Img::Update_Image
void Update_Image()
Definition: d_viewer_img.cpp:188
D_Viewer_Img::Set_Image
void Set_Image(Mat *MA_new)
Definition: d_viewer_img.cpp:165
D_Viewer_Img::MouseScrolled_Ctrl
void MouseScrolled_Ctrl(int x, int y, int delta)
Definition: d_viewer_img.cpp:362
D_Viewer_Img::MA
Mat * MA()
Definition: d_viewer_img.h:51
D_Viewer_Img::img_val_min
double img_val_min()
Definition: d_viewer_img.cpp:15
D_Viewer_Img::Image_Size_Changed
void Image_Size_Changed()
d_img_proc.h
D_Img_Proc::ValAtPix
static int ValAtPix(vector< double > *v_value, Mat *pMA_In, size_t x_pos, size_t y_pos)
Definition: d_img_proc.cpp:2192
D_Viewer_Img::scale_f_y
double scale_f_y()
Definition: d_viewer_img.h:67
D_Error_Handler
The D_Error_Handler class takes error codes from D_ERROR_ENUM and shows a popup if an error occures.
Definition: d_error_handler.h:38
D_Viewer_Img::TypeChanged_MA
void TypeChanged_MA(QString type)
D_Viewer_Img::SC
SceneMouseTrack * SC()
Definition: d_viewer_img.h:54
D_Viewer_Img::Type_MA
QString Type_MA()
Definition: d_viewer_img.h:57
D_Viewer_Img::Zoomed
void Zoomed(int x, int y, double factor)
D_Img_Proc::MinMax_of_Mat
static int MinMax_of_Mat(Mat *pMA_In, double *min_ext, double *max_ext)
Definition: d_img_proc.cpp:2052
D_Viewer_Img::MouseMoved_Pos
void MouseMoved_Pos(QString pos)
D_Viewer_Img::scale_f_x
double scale_f_x()
Definition: d_viewer_img.h:66
Scalar
cv::Scalar Scalar
Definition: d_opencv_typedefs.h:30
D_Viewer_Img::Set_SpreadInMax
void Set_SpreadInMax(double spread_max=255)
Definition: d_viewer_img.h:105
D_Viewer_Img::Set_Zomm
void Set_Zomm(int x, int y, double factor)
Definition: d_viewer_img.cpp:280
D_Viewer_Img::MouseClicked_Value
void MouseClicked_Value(vector< double > val)
D_Viewer_Img::TypeChanged_QI
void TypeChanged_QI(QString type)
D_Viewer_Img::img_val_max
double img_val_max()
Definition: d_viewer_img.cpp:28
D_Viewer_Img::MouseClicked_Pos
void MouseClicked_Pos(QString pos)
D_Viewer_Img::Save_Image_Dialog
QString Save_Image_Dialog()
Definition: d_viewer_img.cpp:198
D_Viewer_Img::Image_Size_Changed
void Image_Size_Changed(int width, int height)
D_Viewer_Img::img_val_range
double img_val_range()
Definition: d_viewer_img.cpp:41
D_Viewer_Img::Time_View_Update
void Time_View_Update(unsigned int time_ms)
D_Viewer_Img::img_width
int img_width()
Definition: d_viewer_img.h:59
D_Viewer_Img::Set_Transformation_Mode
void Set_Transformation_Mode(bool smooth)
Definition: d_viewer_img.cpp:260
D_Viewer_Img::Type_QI
QString Type_QI()
Definition: d_viewer_img.h:58
D_Viewer_Img::QI
QImage * QI()
Definition: d_viewer_img.h:52
D_Viewer_Img::MouseMoved_Value
void MouseMoved_Value(vector< double > val)
D_Viewer_Img::Scaled_Factor
void Scaled_Factor(QString scale)
D_Viewer_Img::D_Viewer_Img
D_Viewer_Img()
Definition: d_viewer_img.cpp:3
D_Img_Proc::Type_of_QImage
static QString Type_of_QImage(QImage *pQI_In)
Definition: d_img_proc.cpp:461
D_Img_Proc::Convert_Mat_to_QImage
static int Convert_Mat_to_QImage(QImage *pQI_Out, Mat *pMA_In, bool use_custom_range_for_spread_non_8bit=false, double in_min=0, double in_max=1)
Definition: d_img_proc.cpp:973
d_enum.h
d_error_handler.h
D_Viewer_Img::clear_Image
void clear_Image()
Definition: d_viewer_img.cpp:8
D_Viewer_Img::Scaled
void Scaled()
D_Viewer_Img::Set_GammaSpread
void Set_GammaSpread(int gammaspread=1)
Definition: d_viewer_img.h:102
D_Viewer_Img::MouseMoved
void MouseMoved()
D_Viewer_Img::TypeChanged
void TypeChanged()
D_Viewer_Img::MouseMoved_Pos
void MouseMoved_Pos(int x, int y)
D_Viewer_Img::TypeChanged_QI
void TypeChanged_QI()
SceneMouseTrack
The SceneMouseTrack class Scene to put in a QGraphicsView that emits additional signals.
Definition: scenemousetrack.h:36
D_Viewer_Img::MouseScrolled
void MouseScrolled(int x, int y, int delta)
Definition: d_viewer_img.cpp:357
D_Viewer_Img::TypeChanged_MA
void TypeChanged_MA()
D_Viewer_Img::Image_Saved
void Image_Saved(QString path)
D_Viewer_Img::Set_SpreadOutMin
void Set_SpreadOutMin(double spread_min=0)
Definition: d_viewer_img.h:106