opencv 阈值处理
来源:互联网 发布:杰士邦 杜蕾斯 知乎 编辑:程序博客网 时间:2024/05/21 02:51
#include <opencv2/opencv.hpp>int main(void){ IplImage *src_image = 0; IplImage *dst_image = 0; IplImage *dst_image_adaptive = 0; int c; int threshold_type; int thresh_val; int max_val; int adaptive_method; int block_size; int offset; src_image = cvLoadImage( "e:\\kankan\\baihe.jpg",0); dst_image = cvCreateImage(cvSize(src_image->width,src_image->height), IPL_DEPTH_8U, 1); cvNamedWindow( "Threshold", CV_WINDOW_AUTOSIZE ); // dst_image_adaptive = cvCreateImage(cvSize(src_image->width,src_image->height), IPL_DEPTH_8U, 1);// cvNamedWindow( "ThresholdAdaptive", CV_WINDOW_AUTOSIZE ); threshold_type = CV_THRESH_BINARY; int threshold_typeBef = CV_THRESH_BINARY+1; cvCreateTrackbar( "threshold type", "Threshold", &threshold_type, 1, 0 ); thresh_val = 100; int thresh_valBef = 0; cvCreateTrackbar( "thresh val", "Threshold", &thresh_val, 255, 0 ); max_val = 100; int max_valBef = 0; cvCreateTrackbar( "max val", "Threshold", &max_val, 255, 0 ); // adaptive_method = CV_ADAPTIVE_THRESH_MEAN_C; // int adaptive_methodBef = 1; // cvCreateTrackbar( "adaptive method", "ThresholdAdaptive", &adaptive_method, 1, 0 ); /* block_size = 1; int block_sizeBef = 0; cvCreateTrackbar( "block size", "ThresholdAdaptive", &block_size, 60, 0 ); offset = 30; int offsetBef = 0; cvCreateTrackbar( "offset", "ThresholdAdaptive", &offset, 60, 0 ); */ for(;;) { if((threshold_typeBef != threshold_type) || (thresh_valBef != thresh_val ) || (max_valBef != max_val) ) { // cvAdaptiveThreshold(src_image, dst_image_adaptive, (double)max_val, adaptive_method, // threshold_type, block_size*2+3, (double)(offset-30)); // cvShowImage("ThresholdAdaptive", dst_image_adaptive); if(max_val < thresh_val ) { max_val = thresh_val; } cvThreshold(src_image, dst_image, (double)thresh_val, (double)max_val, threshold_type); cvShowImage("Threshold", dst_image); threshold_typeBef = threshold_type; thresh_valBef = thresh_val; max_valBef = max_val; // adaptive_methodBef = adaptive_method; // block_sizeBef = block_size; // offsetBef = offset; //printf("The edge detection method is \n"); } c = cvWaitKey(30); if( c == 'q' || c == 'Q' || (c & 255) == 27 || (c & 255) == 32 ) break; } cvDestroyWindow( "Threshold" );//销毁窗口// cvDestroyWindow( "ThresholdAdaptive" );//销毁窗口 cvReleaseImage( &src_image ); //释放图像 cvReleaseImage( &dst_image ); //释放图像 // cvReleaseImage( &dst_image_adaptive ); //释放图像}