diff options
author | Alex <colomar.6.4.3@gmail.com> | 2018-11-05 18:04:59 +0100 |
---|---|---|
committer | Alex <colomar.6.4.3@gmail.com> | 2018-11-05 18:04:59 +0100 |
commit | 7c2c88f6b270944613f9a4bfb0d5c1b34367cd4c (patch) | |
tree | 7eca406f4363aece46e5bf32e1015148f1cce044 | |
parent | aeebae1230b2f981093d4b77cda73b7a06b164c2 (diff) |
Add distance transform; Fix bug: rotate (change < to > in imgcv.cpp);
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | modules/image/inc/img_cv.hpp | 3 | ||||
-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 | 21 | ||||
-rw-r--r-- | modules/image/src/img_iface.cpp | 27 | ||||
-rw-r--r-- | modules/user/inc/user_iface.h | 2 | ||||
-rw-r--r-- | modules/user/inc/user_iface.hpp | 2 | ||||
-rw-r--r-- | modules/user/src/user_clui.c | 24 | ||||
-rw-r--r-- | modules/user/src/user_tui.c | 28 |
10 files changed, 108 insertions, 3 deletions
@@ -1,6 +1,6 @@ #!/usr/bin/make -f VERSION = 2 -PATCHLEVEL = ~a2 +PATCHLEVEL = ~a3 SUBLEVEL = EXTRAVERSION = NAME = diff --git a/modules/image/inc/img_cv.hpp b/modules/image/inc/img_cv.hpp index 9290ac5..f408082 100644 --- a/modules/image/inc/img_cv.hpp +++ b/modules/image/inc/img_cv.hpp @@ -44,7 +44,8 @@ IMG_CV_ACT_ROTATE_ORTO,
IMG_CV_ACT_ROTATE,
IMG_CV_ACT_SET_ROI,
- IMG_CV_ACT_PIXEL_VALUE
+ IMG_CV_ACT_PIXEL_VALUE,
+ IMG_CV_ACT_DISTANCE_TRANSFORM
};
diff --git a/modules/image/inc/img_iface.h b/modules/image/inc/img_iface.h index b7e14ca..9e926d5 100644 --- a/modules/image/inc/img_iface.h +++ b/modules/image/inc/img_iface.h @@ -53,6 +53,7 @@ IMG_IFACE_ACT_ROTATE,
IMG_IFACE_ACT_SET_ROI,
IMG_IFACE_ACT_PIXEL_VALUE,
+ IMG_IFACE_ACT_DISTANCE_TRANSFORM,
IMG_IFACE_ACT_DILATE_ERODE,
IMG_IFACE_ACT_ERODE_DILATE,
diff --git a/modules/image/inc/img_iface.hpp b/modules/image/inc/img_iface.hpp index 710709a..82cfe84 100644 --- a/modules/image/inc/img_iface.hpp +++ b/modules/image/inc/img_iface.hpp @@ -59,6 +59,7 @@ IMG_IFACE_ACT_ROTATE,
IMG_IFACE_ACT_SET_ROI,
IMG_IFACE_ACT_PIXEL_VALUE,
+ IMG_IFACE_ACT_DISTANCE_TRANSFORM,
IMG_IFACE_ACT_DILATE_ERODE,
IMG_IFACE_ACT_ERODE_DILATE,
diff --git a/modules/image/src/img_cv.cpp b/modules/image/src/img_cv.cpp index 6954a69..d70072b 100644 --- a/modules/image/src/img_cv.cpp +++ b/modules/image/src/img_cv.cpp @@ -54,6 +54,7 @@ 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);
static void img_cv_pixel_value (class cv::Mat *imgptr, void *data);
+static void img_cv_distance_transform (class cv::Mat *imgptr);
/******************************************************************************
@@ -133,6 +134,10 @@ void img_cv_act (class cv::Mat *imgptr, int action, void *data) case IMG_CV_ACT_PIXEL_VALUE:
img_cv_pixel_value(imgptr, data);
break;
+
+ case IMG_CV_ACT_DISTANCE_TRANSFORM:
+ img_cv_distance_transform(imgptr);
+ break;
}
}
@@ -596,7 +601,7 @@ static void img_cv_rotate (class cv::Mat *imgptr, void *data) angle = data_cast->angle;
/* Don't rotate if angle is negligible */
- if (fabs(angle) < 1.0) {
+ if (fabs(angle) > 1.0) {
/* Get map_matrix */
map_matrix = cv::getRotationMatrix2D(*center, angle, 1);
@@ -643,6 +648,20 @@ static void img_cv_pixel_value (class cv::Mat *imgptr, void *data) *val = imgptr->at<unsigned char>(y, x);
}
+static void img_cv_distance_transform (class cv::Mat *imgptr)
+{
+ class cv::Mat imgtmp;
+
+ /* Get transform */
+ cv::distanceTransform(*imgptr, imgtmp, CV_DIST_L2, CV_DIST_MASK_PRECISE);
+
+ /* DistanceTransform gives CV_32F image */
+ imgtmp.convertTo(*imgptr, CV_8U);
+
+ /* Cleanup */
+ imgtmp.release();
+}
+
/******************************************************************************
******* end of file **********************************************************
diff --git a/modules/image/src/img_iface.cpp b/modules/image/src/img_iface.cpp index 5142944..cb28790 100644 --- a/modules/image/src/img_iface.cpp +++ b/modules/image/src/img_iface.cpp @@ -96,6 +96,7 @@ static void img_iface_rotate_orto (void *data); static void img_iface_rotate (void *data);
static void img_iface_set_ROI (void *data);
static void img_iface_pixel_value (void *data);
+static void img_iface_distance_transform (void);
static void img_iface_dilate_erode (void *data);
static void img_iface_erode_dilate (void *data);
@@ -254,6 +255,9 @@ void img_iface_act (int action, void *data) case IMG_IFACE_ACT_PIXEL_VALUE:
img_iface_pixel_value(data);
break;
+ case IMG_IFACE_ACT_DISTANCE_TRANSFORM:
+ img_iface_distance_transform();
+ break;
case IMG_IFACE_ACT_DILATE_ERODE:
img_iface_dilate_erode(data);
@@ -1024,6 +1028,29 @@ static void img_iface_pixel_value (void *data) (user_iface_log.len)++;
}
+static void img_iface_distance_transform (void)
+{
+ /* Must have 1 channel */
+ if (image_copy_tmp.channels() != 1) {
+ /* 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;
+ }
+
+ /* Write into log */
+ snprintf(user_iface_log.line[user_iface_log.len], LOG_LINE_LEN,
+ "Distance transform");
+ user_iface_log.lvl[user_iface_log.len] = 1;
+ (user_iface_log.len)++;
+
+ /* Distance transform */
+ img_cv_act(&image_copy_tmp, IMG_CV_ACT_DISTANCE_TRANSFORM, NULL);
+}
+
/* img_cv: composite --------------------------------------------------------*/
static void img_iface_dilate_erode (void *data)
{
diff --git a/modules/user/inc/user_iface.h b/modules/user/inc/user_iface.h index ee9ad7c..2d4a608 100644 --- a/modules/user/inc/user_iface.h +++ b/modules/user/inc/user_iface.h @@ -58,6 +58,8 @@ USER_IFACE_ACT_ROTATE_ORTO,
USER_IFACE_ACT_ROTATE,
USER_IFACE_ACT_SET_ROI,
+ USER_IFACE_ACT_PIXEL_VALUE,
+ USER_IFACE_ACT_DISTANCE_TRANSFORM,
USER_IFACE_ACT_DILATE_ERODE,
USER_IFACE_ACT_ERODE_DILATE,
diff --git a/modules/user/inc/user_iface.hpp b/modules/user/inc/user_iface.hpp index 480cd51..1e3f803 100644 --- a/modules/user/inc/user_iface.hpp +++ b/modules/user/inc/user_iface.hpp @@ -58,6 +58,8 @@ USER_IFACE_ACT_ROTATE_ORTO,
USER_IFACE_ACT_ROTATE,
USER_IFACE_ACT_SET_ROI,
+ USER_IFACE_ACT_PIXEL_VALUE,
+ USER_IFACE_ACT_DISTANCE_TRANSFORM,
USER_IFACE_ACT_DILATE_ERODE,
USER_IFACE_ACT_ERODE_DILATE,
diff --git a/modules/user/src/user_clui.c b/modules/user/src/user_clui.c index 28c88b2..9e83070 100644 --- a/modules/user/src/user_clui.c +++ b/modules/user/src/user_clui.c @@ -285,6 +285,28 @@ static int usr_input (void) break;
}
break;
+ case '7':
+ /* Pixel */
+ switch (ch[3]) {
+ case '0':
+ action = USER_IFACE_ACT_PIXEL_VALUE;
+ break;
+ default:
+ action = USER_IFACE_ACT_FOO;
+ break;
+ }
+ break;
+ case '8':
+ /* Transforms */
+ switch (ch[3]) {
+ case '0':
+ action = USER_IFACE_ACT_DISTANCE_TRANSFORM;
+ break;
+ default:
+ action = USER_IFACE_ACT_FOO;
+ break;
+ }
+ break;
default:
action = USER_IFACE_ACT_FOO;
break;
@@ -418,6 +440,8 @@ static void show_help (void) printf(" - Rotate: %s\n", "f151");
printf(" - Rotate 2rect:%s\n", "f152");
printf(" - Set ROI: %s\n", "f160");
+ printf(" - Pixel value: %s\n", "f170");
+ printf(" - Distance tr.:%s\n", "f180");
printf(" - Scan codes: %s\n", "f20");
printf(" - Scan text: %s\n", "f30");
printf(" - Align: %s\n", "f40");
diff --git a/modules/user/src/user_tui.c b/modules/user/src/user_tui.c index b2cefd0..4fba4b5 100644 --- a/modules/user/src/user_tui.c +++ b/modules/user/src/user_tui.c @@ -388,6 +388,32 @@ static int usr_input (void) break;
}
break;
+ case '7':
+ /* Pixel */
+ ch = wgetch(win_log);
+
+ switch (ch) {
+ case '0':
+ action = USER_IFACE_ACT_PIXEL_VALUE;
+ break;
+ default:
+ action = USER_IFACE_ACT_FOO;
+ break;
+ }
+ break;
+ case '8':
+ /* Transforms */
+ ch = wgetch(win_log);
+
+ switch (ch) {
+ case '0':
+ action = USER_IFACE_ACT_DISTANCE_TRANSFORM;
+ break;
+ default:
+ action = USER_IFACE_ACT_FOO;
+ break;
+ }
+ break;
default:
action = USER_IFACE_ACT_FOO;
break;
@@ -542,6 +568,8 @@ static void show_help (void) mvwprintw(win_help, r++, c, " - Rotate: %s", "f151");
mvwprintw(win_help, r++, c, " - Rotate 2rect:%s", "f152");
mvwprintw(win_help, r++, c, " - Set ROI: %s", "f160");
+ mvwprintw(win_help, r++, c, " - Pixel value: %s", "f170");
+ mvwprintw(win_help, r++, c, " - Distance tr.:%s", "f180");
mvwprintw(win_help, r++, c, " - Scan codes: %s", "f20");
mvwprintw(win_help, r++, c, " - Scan text: %s", "f30");
mvwprintw(win_help, r++, c, " - Align: %s", "f40");
|