From f20b5ea598d50ce486bf758fbbe024724a302730 Mon Sep 17 00:00:00 2001 From: Douglas Bagnall Date: Sat, 22 May 2010 00:13:15 +1200 Subject: [PATCH] debug images from advanced modes --- edges.c | 22 ++++++++++++++++++++++ floodfill.c | 5 ++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/edges.c b/edges.c index 33d0ad2..3021ed3 100644 --- a/edges.c +++ b/edges.c @@ -376,6 +376,16 @@ look_for_line(GstSparrow *sparrow, guint8 *in, sparrow_find_lines_t *fl, } } +static void +debug_map_image(GstSparrow *sparrow, sparrow_find_lines_t *fl){ + guint32 *data = (guint32*)fl->debug->imageData; + memset(data, 0, sparrow->in.size); + for (guint i = 0; i < sparrow->in.pixcount; i++){ + data[i] |= fl->map[i].signal[SPARROW_HORIZONTAL] << sparrow->in.gshift; + data[i] |= fl->map[i].signal[SPARROW_VERTICAL] << sparrow->in.rshift; + } + MAYBE_DEBUG_IPL(fl->debug); +} /* draw the line (in sparrow->colour) */ static inline void @@ -429,6 +439,9 @@ mode_find_edges(GstSparrow *sparrow, guint8 *in, guint8 *out){ } sparrow->countdown = sparrow->lag + 2; } + if (sparrow->debug){ + debug_map_image(sparrow, fl); + } return SPARROW_STATUS_QUO; done: /*match up lines and find corners */ @@ -442,6 +455,10 @@ mode_find_edges(GstSparrow *sparrow, guint8 *in, guint8 *out){ INVISIBLE void finalise_find_edges(GstSparrow *sparrow){ + //debug_find_lines(fl); + if (sparrow->debug){ + cvReleaseImage(&fl->debug); + } sparrow_find_lines_t *fl = (sparrow_find_lines_t *)&sparrow->helper_struct; free(fl->h_lines); free(fl->shuffled_lines); @@ -529,4 +546,9 @@ init_find_edges(GstSparrow *sparrow){ setup_colour_shifts(sparrow, fl); sparrow->countdown = sparrow->lag + 2; + //debug_find_lines(fl); + if (sparrow->debug){ + CvSize size = {sparrow->in.width, sparrow->in.height}; + fl->debug = cvCreateImage(size, IPL_DEPTH_8U, PIXSIZE); + } } diff --git a/floodfill.c b/floodfill.c index 97c974c..8eefabe 100644 --- a/floodfill.c +++ b/floodfill.c @@ -150,7 +150,7 @@ find_edges_threshold(IplImage *im) } GST_DEBUG("found best threshold %d -- %d pixel change at %d/%d pixels\n", best_t, best_d, totals[best_t], pixels); - + //MAYBE_DEBUG_IPL(small); cvReleaseImage(&small); cvReleaseHist(&hist); @@ -186,6 +186,7 @@ mode_find_screen(GstSparrow *sparrow, guint8 *in, guint8 *out){ int best_t = find_edges_threshold(green); /*XXX if best_t is wrong, add to sparrow->countdown: probably the light is not really on. But what counts as wrong? */ + MAYBE_DEBUG_IPL(green); cvCmpS(green, best_t, mask, CV_CMP_GT); goto black; case 1: @@ -193,12 +194,14 @@ mode_find_screen(GstSparrow *sparrow, guint8 *in, guint8 *out){ middle = (CvPoint){sparrow->in.width / 2, sparrow->in.height / 2}; memset(working->imageData, 255, size); floodfill_mono_superfast(mask, working, middle); + MAYBE_DEBUG_IPL(working); goto black; case 0: /* floodfill the border, removing onscreen dirt.*/ corner = (CvPoint){0, 0}; memset(mask->imageData, 255, size); floodfill_mono_superfast(working, mask, corner); + MAYBE_DEBUG_IPL(mask); sparrow->screenmask = (guint8*)mask->imageData; cvReleaseImage(&(finder->green)); cvReleaseImage(&(finder->working)); -- 2.11.4.GIT