diff options
author | AlejandroColomar <colomar.6.4.3@gmail.com> | 2018-11-01 12:46:55 +0100 |
---|---|---|
committer | AlejandroColomar <colomar.6.4.3@gmail.com> | 2018-11-01 12:46:55 +0100 |
commit | b8da69236869affa462f141516333f4519c7a042 (patch) | |
tree | 141c35b8ef982e03ba346a7be96283c7cc450488 | |
parent | 01e70fb2524347845d1a02666cdfb21751182ecd (diff) |
Add fit_ellipse
-rw-r--r-- | modules/image/inc/img_cv.hpp | 1 | ||||
-rw-r--r-- | modules/image/inc/img_iface.h | 1 | ||||
-rw-r--r-- | modules/image/inc/img_iface.hpp | 1 | ||||
-rw-r--r-- | modules/image/src/img_cv.cpp | 39 | ||||
-rw-r--r-- | modules/image/src/img_iface.cpp | 36 | ||||
-rw-r--r-- | modules/user/inc/user_iface.h | 1 | ||||
-rw-r--r-- | modules/user/inc/user_iface.hpp | 1 | ||||
-rw-r--r-- | modules/user/src/user_clui.c | 4 | ||||
-rw-r--r-- | modules/user/src/user_tui.c | 4 | ||||
-rw-r--r-- | tmp/Makefile | 2 |
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 ########################################################### |