summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandroColomar <colomar.6.4.3@gmail.com>2018-11-01 12:46:55 +0100
committerAlejandroColomar <colomar.6.4.3@gmail.com>2018-11-01 12:46:55 +0100
commitb8da69236869affa462f141516333f4519c7a042 (patch)
tree141c35b8ef982e03ba346a7be96283c7cc450488
parent01e70fb2524347845d1a02666cdfb21751182ecd (diff)
Add fit_ellipse
-rw-r--r--modules/image/inc/img_cv.hpp1
-rw-r--r--modules/image/inc/img_iface.h1
-rw-r--r--modules/image/inc/img_iface.hpp1
-rw-r--r--modules/image/src/img_cv.cpp39
-rw-r--r--modules/image/src/img_iface.cpp36
-rw-r--r--modules/user/inc/user_iface.h1
-rw-r--r--modules/user/inc/user_iface.hpp1
-rw-r--r--modules/user/src/user_clui.c4
-rw-r--r--modules/user/src/user_tui.c4
-rw-r--r--tmp/Makefile2
10 files changed, 88 insertions, 2 deletions
diff --git a/modules/image/inc/img_cv.hpp b/modules/image/inc/img_cv.hpp
index 7c50c33..7b2878c 100644
--- a/modules/image/inc/img_cv.hpp
+++ b/modules/image/inc/img_cv.hpp
@@ -36,6 +36,7 @@
IMG_CV_ACT_CONTOURS,
IMG_CV_ACT_CONTOURS_SIZE,
IMG_CV_ACT_MIN_AREA_RECT,
+ IMG_CV_ACT_FIT_ELLIPSE,
IMG_CV_ACT_ROTATE_ORTO,
IMG_CV_ACT_ROTATE,
IMG_CV_ACT_SET_ROI
diff --git a/modules/image/inc/img_iface.h b/modules/image/inc/img_iface.h
index 7e9a5b4..4ae4b70 100644
--- a/modules/image/inc/img_iface.h
+++ b/modules/image/inc/img_iface.h
@@ -44,6 +44,7 @@
IMG_IFACE_ACT_CONTOURS,
IMG_IFACE_ACT_CONTOURS_SIZE,
IMG_IFACE_ACT_MIN_AREA_RECT,
+ IMG_IFACE_ACT_FIT_ELLIPSE,
IMG_IFACE_ACT_ROTATE_ORTO,
IMG_IFACE_ACT_ROTATE,
IMG_IFACE_ACT_SET_ROI,
diff --git a/modules/image/inc/img_iface.hpp b/modules/image/inc/img_iface.hpp
index 53fc324..800a871 100644
--- a/modules/image/inc/img_iface.hpp
+++ b/modules/image/inc/img_iface.hpp
@@ -50,6 +50,7 @@
IMG_IFACE_ACT_CONTOURS,
IMG_IFACE_ACT_CONTOURS_SIZE,
IMG_IFACE_ACT_MIN_AREA_RECT,
+ IMG_IFACE_ACT_FIT_ELLIPSE,
IMG_IFACE_ACT_ROTATE_ORTO,
IMG_IFACE_ACT_ROTATE,
IMG_IFACE_ACT_SET_ROI,
diff --git a/modules/image/src/img_cv.cpp b/modules/image/src/img_cv.cpp
index 4d26f47..d185634 100644
--- a/modules/image/src/img_cv.cpp
+++ b/modules/image/src/img_cv.cpp
@@ -43,6 +43,7 @@ static void img_cv_erode (class cv::Mat *imgptr, void *data);
static void img_cv_contours (class cv::Mat *imgptr, void *data);
static void img_cv_contours_size (void *data);
static void img_cv_min_area_rect (class cv::Mat *imgptr, void *data);
+static void img_cv_fit_ellipse (class cv::Mat *imgptr, void *data);
static void img_cv_rotate_orto (class cv::Mat *imgptr, void *data);
static void img_cv_rotate (class cv::Mat *imgptr, void *data);
static void img_cv_set_ROI (class cv::Mat *imgptr, void *data);
@@ -95,6 +96,9 @@ void img_cv_act (class cv::Mat *imgptr, int action, void *data)
case IMG_CV_ACT_MIN_AREA_RECT:
img_cv_min_area_rect(imgptr, data);
break;
+ case IMG_CV_ACT_FIT_ELLIPSE:
+ img_cv_fit_ellipse(imgptr, data);
+ break;
case IMG_CV_ACT_ROTATE_ORTO:
img_cv_rotate_orto(imgptr, data);
@@ -329,7 +333,7 @@ static void img_cv_min_area_rect (class cv::Mat *imgptr, void *data)
contour = data_cast->contour;
/* Rotated rectangle */
class cv::RotatedRect *rect;
- rect = data_cast->rect;
+ rect = data_cast->rect;
/* Get rectangle */
*rect = cv::minAreaRect(*contour);
@@ -351,6 +355,39 @@ static void img_cv_min_area_rect (class cv::Mat *imgptr, void *data)
CV_RGB(0, 0, 255), 1, 8, 0);
}
+static void img_cv_fit_ellipse (class cv::Mat *imgptr, void *data)
+{
+ /* Data */
+ struct Img_Iface_Data_MinARect *data_cast;
+ data_cast = (struct Img_Iface_Data_MinARect *)data;
+
+ /* Contours */
+ std::vector <class cv::Point_ <int>> *contour;
+ contour = data_cast->contour;
+ /* Rotated rectangle */
+ class cv::RotatedRect *rect;
+ rect = data_cast->rect;
+
+ /* Get rectangle */
+ *rect = cv::fitEllipse(*contour);
+
+ /* Draw rectangle */
+ class cv::Point_<float> vertices[4];
+ rect->points(vertices);
+ cv::line(*imgptr, cv::Point(vertices[0].x, vertices[0].y),
+ cv::Point(vertices[1].x, vertices[1].y),
+ CV_RGB(0, 0, 255), 1, 8, 0);
+ cv::line(*imgptr, cv::Point(vertices[1].x, vertices[1].y),
+ cv::Point(vertices[2].x, vertices[2].y),
+ CV_RGB(0, 0, 255), 1, 8, 0);
+ cv::line(*imgptr, cv::Point(vertices[2].x, vertices[2].y),
+ cv::Point(vertices[3].x, vertices[3].y),
+ CV_RGB(0, 0, 255), 1, 8, 0);
+ cv::line(*imgptr, cv::Point(vertices[3].x, vertices[3].y),
+ cv::Point(vertices[0].x, vertices[0].y),
+ CV_RGB(0, 0, 255), 1, 8, 0);
+}
+
static void img_cv_rotate_orto (class cv::Mat *imgptr, void *data)
{
/* Data */
diff --git a/modules/image/src/img_iface.cpp b/modules/image/src/img_iface.cpp
index 96e994c..634351e 100644
--- a/modules/image/src/img_iface.cpp
+++ b/modules/image/src/img_iface.cpp
@@ -78,6 +78,7 @@ static void img_iface_erode (void *data);
static void img_iface_contours (void *data);
static void img_iface_contours_size (void *data);
static void img_iface_min_area_rect (void *data);
+static void img_iface_fit_ellipse (void *data);
static void img_iface_rotate_orto (void *data);
static void img_iface_rotate (void *data);
static void img_iface_set_ROI (void *data);
@@ -201,6 +202,9 @@ void img_iface_act (int action, void *data)
case IMG_IFACE_ACT_MIN_AREA_RECT:
img_iface_min_area_rect(data);
break;
+ case IMG_IFACE_ACT_FIT_ELLIPSE:
+ img_iface_fit_ellipse(data);
+ break;
case IMG_IFACE_ACT_ROTATE_ORTO:
img_iface_rotate_orto(data);
break;
@@ -671,6 +675,38 @@ static void img_iface_min_area_rect (void *data)
img_cv_act(&image_copy_tmp, IMG_CV_ACT_MIN_AREA_RECT, data);
}
+static void img_iface_fit_ellipse (void *data)
+{
+ /* Data */
+ struct Img_Iface_Data_MinARect data_tmp;
+ if (!data) {
+ if(!contours.size()) {
+ /* Write into log */
+ snprintf(user_iface_log.line[user_iface_log.len],
+ LOG_LINE_LEN,
+ "! Invalid input");
+ user_iface_log.lvl[user_iface_log.len] = 1;
+ (user_iface_log.len)++;
+
+ return;
+ }
+ data_tmp.contour = &(contours[0]);
+
+ data_tmp.rect = &rectangle;
+
+ data = (void *)&data_tmp;
+ }
+
+ /* Write into log */
+ snprintf(user_iface_log.line[user_iface_log.len], LOG_LINE_LEN,
+ "Fit ellipse");
+ user_iface_log.lvl[user_iface_log.len] = 1;
+ (user_iface_log.len)++;
+
+ /* Enclosing rectangle */
+ img_cv_act(&image_copy_tmp, IMG_CV_ACT_FIT_ELLIPSE, data);
+}
+
static void img_iface_rotate_orto (void *data)
{
/* Data */
diff --git a/modules/user/inc/user_iface.h b/modules/user/inc/user_iface.h
index 8ca86a6..7d82f64 100644
--- a/modules/user/inc/user_iface.h
+++ b/modules/user/inc/user_iface.h
@@ -50,6 +50,7 @@
USER_IFACE_ACT_CONTOURS,
USER_IFACE_ACT_CONTOURS_SIZE,
USER_IFACE_ACT_MIN_AREA_RECT,
+ USER_IFACE_ACT_FIT_ELLIPSE,
USER_IFACE_ACT_ROTATE_ORTO,
USER_IFACE_ACT_ROTATE,
USER_IFACE_ACT_SET_ROI,
diff --git a/modules/user/inc/user_iface.hpp b/modules/user/inc/user_iface.hpp
index ff90eea..c37e5d4 100644
--- a/modules/user/inc/user_iface.hpp
+++ b/modules/user/inc/user_iface.hpp
@@ -50,6 +50,7 @@
USER_IFACE_ACT_CONTOURS,
USER_IFACE_ACT_CONTOURS_SIZE,
USER_IFACE_ACT_MIN_AREA_RECT,
+ USER_IFACE_ACT_FIT_ELLIPSE,
USER_IFACE_ACT_ROTATE_ORTO,
USER_IFACE_ACT_ROTATE,
USER_IFACE_ACT_SET_ROI,
diff --git a/modules/user/src/user_clui.c b/modules/user/src/user_clui.c
index 7773c73..d9b2a75 100644
--- a/modules/user/src/user_clui.c
+++ b/modules/user/src/user_clui.c
@@ -213,6 +213,9 @@ static int usr_input (void)
case '2':
action = USER_IFACE_ACT_MIN_AREA_RECT;
break;
+ case '3':
+ action = USER_IFACE_ACT_FIT_ELLIPSE;
+ break;
default:
action = USER_IFACE_ACT_FOO;
break;
@@ -370,6 +373,7 @@ static void show_help (void)
printf(" - Contours: %s\n", "f130");
printf(" - Contours siz:%s\n", "f131");
printf(" - Min. A rect.:%s\n", "f132");
+ printf(" - Fit ellipse: %s\n", "f133");
printf(" - Rotate orto.:%s\n", "f140");
printf(" - Rotate: %s\n", "f141");
printf(" - Rotate 2rect:%s\n", "f142");
diff --git a/modules/user/src/user_tui.c b/modules/user/src/user_tui.c
index e7f570d..e2efcfa 100644
--- a/modules/user/src/user_tui.c
+++ b/modules/user/src/user_tui.c
@@ -320,6 +320,9 @@ static int usr_input (void)
case '2':
action = USER_IFACE_ACT_MIN_AREA_RECT;
break;
+ case '3':
+ action = USER_IFACE_ACT_FIT_ELLIPSE;
+ break;
default:
action = USER_IFACE_ACT_FOO;
break;
@@ -502,6 +505,7 @@ static void show_help (void)
mvwprintw(win_help, r++, c, " - Contours: %s", "f130");
mvwprintw(win_help, r++, c, " - Contours siz:%s", "f131");
mvwprintw(win_help, r++, c, " - Min. A rect.:%s", "f132");
+ mvwprintw(win_help, r++, c, " - Fit ellipse: %s", "f133");
mvwprintw(win_help, r++, c, " - Rotate orto.:%s", "f140");
mvwprintw(win_help, r++, c, " - Rotate: %s", "f141");
mvwprintw(win_help, r++, c, " - Rotate 2rect:%s", "f142");
diff --git a/tmp/Makefile b/tmp/Makefile
index a5043d2..12162dc 100644
--- a/tmp/Makefile
+++ b/tmp/Makefile
@@ -67,7 +67,7 @@ main.o: main.s
clean:
$(Q)rm -f *.o *.s
- @echo "Clean binaries"
+ @echo "Clean tmp"
################################################################################
######## End of file ###########################################################