天天看点

opencv中利用otsu算法进行阈值化

#include "opencv2/opencv.hpp" 

#include <opencv2/core/core.hpp>  

#include<opencv2/highgui/highgui.hpp>  

#include<opencv2/imgproc/imgproc.hpp> 

#include <iostream>

using namespace std;

int main (int argc, char **argv)

{

  IplImage *src_img = 0, *dst_img;

  char *imagename;

  imagename = argc > 1 ? argv[1] : "C:/Documents and Settings/Administrator/My Documents/VS2008/测试Opencv01/测试Opencv01/0.bmp";

    src_img = cvLoadImage (imagename, CV_LOAD_IMAGE_GRAYSCALE);

  if (src_img == 0)

    return -1;

  dst_img = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_8U, 1);

  cvSmooth (src_img, src_img, CV_GAUSSIAN, 5);  //对于原图像进行高斯平滑滤波

  // (1)二値化(大津法进行阈值化)

  cvThreshold (src_img, dst_img, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

  cvNamedWindow ("Threshold", CV_WINDOW_AUTOSIZE);

  cvShowImage ("Threshold", dst_img);

  cvWaitKey (0);

  cvDestroyWindow ("Threshold");

  cvReleaseImage (&src_img);

  cvReleaseImage (&dst_img);

  return 0;

}