#include
#include
#include
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
const char* filename = "YinZhang\\0004.jpg";
IplImage * pSrcImg=NULL;
IplImage * pGrayImg = NULL;
IplImage * pOtsu = NULL;
IplImage * erode =NULL;
IplImage * dilate = NULL;
IplImage * pCanny=NULL;
int threshold=1;
pSrcImg = cvLoadImage(filename,1);
pGrayImg = cvCreateImage(cvGetSize(pSrcImg),IPL_DEPTH_8U,1);
pOtsu= cvCreateImage(cvGetSize(pSrcImg),IPL_DEPTH_8U,1);
pCanny=cvCreateImage(cvGetSize(pSrcImg),IPL_DEPTH_8U,1);
erode = cvCreateImage(cvGetSize(pSrcImg), 8, 1);
dilate = cvCreateImage(cvGetSize(pSrcImg), 8, 1);
cvCvtColor(pSrcImg, pGrayImg, COLOR_BGR2GRAY);//图像灰度化
cvThreshold(pGrayImg, pOtsu, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);//大津法
cvDilate(pOtsu,dilate, NULL,1); //膨胀
cvErode( dilate,erode, NULL,3); //腐蚀 (先膨胀后腐蚀为闭运算)
cvCanny(pOtsu, pCanny, threshold, threshold * 3, 3); //canny算子边缘检测
cvNamedWindow( "grayImg", 1 );
cvShowImage( "grayImg", pGrayImg );
cvNamedWindow( "otuImg", 1 );
cvShowImage( "otuImg", pOtsu);
cvNamedWindow("canny",1);
cvShowImage("canny", pCanny);
//cvNamedWindow("Dilate",1);
//cvShowImage ("Dilate",dilate);
//cvNamedWindow( "erode",1);
//cvShowImage ("erode",erode);
cvWaitKey(0);
return 0;
}