Image Contour detection and display using OpenCV
In this example we threshold the image based on the position of the track bar. Then find contours on the image an display the contours as white lines.
#include "stdafx.h" #include "cv.h" #include "highgui.h" // global variables IplImage* input = NULL; IplImage* gray = NULL; int threshold = 100; CvMemStorage* storage = NULL; /** trackbar event * @param trackbar position */ void on_trackbar(int) { if (storage == NULL) { // create storage gray = cvCreateImage(cvGetSize(input), 8,1); storage = cvCreateMemStorage(0); } else { // clear storage cvClearMemStorage(storage); } // convert to gray scale and then threshold cvCvtColor(input, gray, CV_BGR2GRAY); cvThreshold(gray,gray,threshold,255,CV_THRESH_BINARY); // find the edges CvSeq* edges = 0; cvFindContours(gray, storage, &edges); cvZero(gray); if (edges) { // display the edges as whiet lines cvDrawContours(gray, edges, cvScalarAll(255),cvScalarAll(255),100); } cvShowImage("Input", gray); } /** main function * @param argc arguments * @param argv argument values * @return exit code */ int _tmain(int argc, _TCHAR* argv[]) { // open and display input image input = cvLoadImage("test.jpg"); cvNamedWindow("Input", CV_WINDOW_AUTOSIZE); cvShowImage("Input", input); // create trackbar callback cvCreateTrackbar("Threshold", "Input", &threshold, 255, on_trackbar); on_trackbar(0); // wait for user cvWaitKey(0); // garbage collection cvReleaseImage(&input); cvDestroyWindow("Input"); return 0; }