#include &lt;iostream&gt; #include &lt;opencv2/core/core.hpp&gt; #include &lt;opencv2/highgui/highgui.hpp&gt; #include &lt;opencv2/opencv.hpp&gt; using namespace cv ; using namespace std ; Mat src; Mat src_gray; int thresh = 100; int max_thresh = 255; RNG rng(12345); void thresh_callback(int, void* ); int main( int, char** argv ) { <%%KEEPWHITESPACE%%> src = cv::imread("/Users/powenko/Desktop/apple.png"); <%%KEEPWHITESPACE%%> if (src.empty()) <%%KEEPWHITESPACE%%> { <%%KEEPWHITESPACE%%> cerr &lt;&lt; "No image supplied ..." &lt;&lt; endl; <%%KEEPWHITESPACE%%> return -1; <%%KEEPWHITESPACE%%> } <%%KEEPWHITESPACE%%> const char* source_window = "Source"; <%%KEEPWHITESPACE%%> namedWindow( source_window, WINDOW_AUTOSIZE ); <%%KEEPWHITESPACE%%> imshow( source_window, src ); <%%KEEPWHITESPACE%%> createTrackbar( " erode thresh:", "Source", &amp;thresh, max_thresh, thresh_callback ); <%%KEEPWHITESPACE%%> thresh_callback( 0, 0 ); <%%KEEPWHITESPACE%%> waitKey(0); <%%KEEPWHITESPACE%%> return(0); } void thresh_callback(int, void* ) { <%%KEEPWHITESPACE%%> Mat canny_output; <%%KEEPWHITESPACE%%> vector&lt;vector&lt;Point&gt; &gt; contours; <%%KEEPWHITESPACE%%> vector&lt;Vec4i&gt; hierarchy; <%%KEEPWHITESPACE%%> //kernel的形狀----矩形: MORPH_RECT 交叉形: MORPH_CROSS 椭圆形 : MORPH_ELLIPSE <%%KEEPWHITESPACE%%> Mat drawing; <%%KEEPWHITESPACE%%> if(thresh&gt;0){ <%%KEEPWHITESPACE%%> Mat element = getStructuringElement(MORPH_RECT, Size(thresh,thresh)); <%%KEEPWHITESPACE%%> erode(src, drawing, element); <%%KEEPWHITESPACE%%> }else{ <%%KEEPWHITESPACE%%> drawing=src; <%%KEEPWHITESPACE%%> } <%%KEEPWHITESPACE%%> namedWindow( "Contours", WINDOW_AUTOSIZE ); <%%KEEPWHITESPACE%%> imshow( "Contours", drawing ); }