opencv——阈值分割图像

#include "stdafx.h"
#include "opencv2opencv.hpp"

using namespace cv;
IplImage* g_image=NULL;
IplImage* g_gray=NULL;

int g_thresh=120;
CvMemStorage* g_storage=NULL;
void on_trackbar(int)
{
    if(g_storage==NULL)
    {
        g_gray=cvCreateImage(cvGetSize(g_image),8,1);
        g_storage=cvCreateMemStorage(0);
        
    }
    else
        cvClearMemStorage(g_storage);
    
    CvSeq* contours = NULL;
    cvCvtColor(g_image,g_gray,CV_BGR2GRAY);
    cvThreshold(g_gray,g_gray,g_thresh,255,CV_THRESH_BINARY);
    cvFindContours(g_gray,g_storage,&contours);
    cvZero(g_gray);
    if(contours)
    {
        cvDrawContours(g_gray,
            contours,
            cvScalarAll(255),
            cvScalarAll(255),
            100);
    }
    cvShowImage("Contours",g_gray);
}
int main(int argc,char** argv)
{
  
  g_image = cvLoadImage("lena.jpg");
  cvNamedWindow("Contours",1);
  cvCreateTrackbar("Threshold","Contours",&g_thresh,200,on_trackbar);
  on_trackbar(0);
  cvWaitKey();
  return 0;
}

原文地址:https://www.cnblogs.com/nanyangzp/p/3496469.html