From b90d1b6bf846a97b260e01f0799f39ffb439ea6d Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Fri, 25 May 2012 11:08:24 +0200 Subject: cvg: Add Sobel filter --- cvg.c | 24 ++++++++++++++++++++++++ cvg.ui | 1 + 2 files changed, 25 insertions(+) diff --git a/cvg.c b/cvg.c index 42c02f4..1d43aba 100644 --- a/cvg.c +++ b/cvg.c @@ -259,6 +259,28 @@ gauss_filter(struct cvg *cvg, IplImage *image) return out; } +static IplImage * +sobel_filter(struct cvg *cvg, IplImage *image) +{ + IplImage *out, *tmp, *tmp2, *gray; + + gray = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1); + tmp = cvCreateImage(cvGetSize(image), IPL_DEPTH_16S, 1); + tmp2 = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1); + out = cvCreateImage(cvGetSize(image), image->depth, image->nChannels); + + cvCvtColor(image, gray, CV_BGR2GRAY); + cvSobel(gray, tmp, 0, 1, 3); + cvConvertScaleAbs(tmp, tmp2, 1, 0); + cvCvtColor(tmp2, out, CV_GRAY2BGR); + + cvReleaseImage(&gray); + cvReleaseImage(&tmp); + cvReleaseImage(&tmp2); + + return out; +} + static IplImage * good_features_to_track(struct cvg *cvg, IplImage *image) { @@ -326,6 +348,8 @@ method_set(GtkComboBox *widget, gpointer userdata) cvg->filter = good_features_to_track; else if (strcmp(text, "Pass-Through") == 0) cvg->filter = pass_through_filter; + else if (strcmp(text, "Sobel") == 0) + cvg->filter = sobel_filter; else if (strcmp(text, "Hide") == 0) cvg->filter = hide_filter; update_right_drawing_area(cvg); diff --git a/cvg.ui b/cvg.ui index 0a821cd..d4ac453 100644 --- a/cvg.ui +++ b/cvg.ui @@ -84,6 +84,7 @@ Hide Gauss GoodFeaturesToTrack + Sobel Pass-Through -- cgit