summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex <colomar.6.4.3@gmail.com>2018-11-05 18:04:59 +0100
committerAlex <colomar.6.4.3@gmail.com>2018-11-05 18:04:59 +0100
commit7c2c88f6b270944613f9a4bfb0d5c1b34367cd4c (patch)
tree7eca406f4363aece46e5bf32e1015148f1cce044
parentaeebae1230b2f981093d4b77cda73b7a06b164c2 (diff)
Add distance transform; Fix bug: rotate (change < to > in imgcv.cpp);
-rw-r--r--Makefile2
-rw-r--r--modules/image/inc/img_cv.hpp3
-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.cpp21
-rw-r--r--modules/image/src/img_iface.cpp27
-rw-r--r--modules/user/inc/user_iface.h2
-rw-r--r--modules/user/inc/user_iface.hpp2
-rw-r--r--modules/user/src/user_clui.c24
-rw-r--r--modules/user/src/user_tui.c28
10 files changed, 108 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index fca4bb9..691d537 100644
--- a/Makefile
+++ b/Makefile
@@ -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");