例:根據(jù)滑動(dòng)條參數(shù)檢測(cè)輪廓,在滑動(dòng)條變化時(shí)候重新檢測(cè)
效果圖:
/** Our Example 8-2 is drawn from the OpenCV package. Here we create a window with an image in it. A trackbar sets a simple threshold, and the contours in the thresholded im- age are drawn. The image is updated whenever the trackbar is adjusted. Example 8-2. Finding contours based on a trackbar’s location; the contours are updated whenever the trackbar is moved */ #include "stdafx.h" #include "cv.h" #include "highgui.h" IplImage* g_img = NULL; IplImage* g_gray = NULL; int g_thresh = 100; CvMemStorage* g_storage = NULL; //內(nèi)存存儲(chǔ)器是一個(gè)可用來存儲(chǔ)諸如序列,輪廓,,圖形,子劃分等 //動(dòng)態(tài)增長(zhǎng)數(shù)據(jù)結(jié)構(gòu)的底層結(jié)構(gòu),。 void on_trackbar(int pos) { if (g_storage == NULL) { g_gray = cvCreateImage(cvGetSize(g_img), 8, 1); g_storage = cvCreateMemStorage();//創(chuàng)建內(nèi)存塊默認(rèn)值為64K } else { cvClearMemStorage(g_storage); //清除儲(chǔ)存塊內(nèi)容,并不釋放內(nèi)存 } cvCvtColor(g_img, g_gray, CV_BGR2GRAY); //色彩空間轉(zhuǎn)換, BGR到GRAY cvThreshold(g_gray, g_gray, g_thresh, 255, CV_THRESH_BINARY); //對(duì)數(shù)組元素進(jìn)行固定閾值操作 //該函數(shù)的典型應(yīng)用是對(duì)灰度圖像進(jìn)行閾值操作得到二值圖像,。 CvSeq* contours = 0; //可動(dòng)態(tài)增長(zhǎng)元素序列 cvFindContours( //在二值圖像中尋找輪廓 g_gray, //輸入二值圖像 g_storage, //得到的輪廓的存儲(chǔ)容器 &contours //指向第一個(gè)輪廓的指針 ); //coutours序列指針指向儲(chǔ)存在g_storage 內(nèi)存塊中的輪廓 cvZero(g_gray); //等于cvSetZero,清空?qǐng)D像 if (contours) //如果序列非空 { cvDrawContours( //在圖像中繪制外部和內(nèi)部的輪廓 g_gray, contours, //指針指向第一個(gè)輪廓 cvScalarAll(255), //g_gray 為單通道顏色,只有一種顏色 cvScalarAll(255), //賦為白色 100 //繪制輪廓的最大等級(jí),如果為0 單獨(dú)繪制輪廓 ); cvShowImage("Contours", g_gray); } } int main() { cvNamedWindow("g_img", CV_WINDOW_AUTOSIZE); g_img = cvLoadImage("lena.jpg"); cvShowImage("g_img", g_img); cvNamedWindow("Contours", CV_WINDOW_AUTOSIZE); cvCreateTrackbar( "Threshold", //滑塊名字 "Contours", //滑塊所在窗口名字 &g_thresh, //指定創(chuàng)建時(shí)的滑塊位置 255, //滑塊位置的最大值 on_trackbar //每次滑塊位置被改變的時(shí)候,,被調(diào)用函數(shù)的指針。 //這個(gè)函數(shù)應(yīng)該被聲明為void Foo(int); //如果沒有回調(diào)函數(shù),,這個(gè)值可以設(shè)為NULL,。 ); on_trackbar(0); //初始先調(diào)用一次,否者滑塊變動(dòng)時(shí)才顯示 cvWaitKey(); cvDestroyAllWindows(); cvReleaseImage(&g_img); cvReleaseImage(&g_gray); return 0; } (2) 效果圖 改進(jìn)單獨(dú)加顏色繪制輪廓
|
|