// Basic_OpenCV_2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include "cv.h"
#include "highgui.h"
using namespace std;
void SmoothImage(IplImage* image)//平滑函数
{
cvNamedWindow("Smooth_in");
cvNamedWindow("Smooth_out");
cvShowImage("Smooth_in",image);
IplImage* out = cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,3);
cvSmooth(image,out,CV_BLUR,32,32);//平滑函数,后面两个参数是窗口大小
cvShowImage("Smooth_out",out);
cvReleaseImage(&out);
cvWaitKey(0);
cvDestroyAllWindows();
}
void doPyrDown(IplImage* in, int filter = IPL_GAUSSIAN_5x5)//图像缩小为一半
{
//Best to make sure input image is divisible by two.
assert(in->width%2 == 0 && in->height%2 == 0);
IplImage* out = cvCreateImage(cvSize(in->width/2 , in->height/2) , in->depth , in->nChannels);
cvPyrDown(in , out);
cvNamedWindow("PyrDown_out");
cvShowImage("PyrDown_out",out);
cvReleaseImage(&out);
cvWaitKey(0);
cvDestroyAllWindows();
//return out;
}
void doCanny(IplImage* in , double lowThresh , double highThresh , double aperture)
{
IplImage* out = cvCreateImage(cvSize(in->width,in->height) , IPL_DEPTH_8U , 1);
if(in->nChannels != 1)
{
//cout<<"error! unsupported format or combination of formats() in unknown function"<<endl;
//return;//canny only handles gray scale image
//若不是灰度图,直接转化成灰度图
IplImage* gray = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1);
cvCvtColor(in, gray, CV_BGR2GRAY);
out = gray;
}
cvCanny(in , out , lowThresh , highThresh , aperture );
cvNamedWindow("Canny_out");
cvShowImage("Canny_out",out);
cvReleaseImage(&out);
cvWaitKey(0);
cvDestroyAllWindows();
}
int _tmain(int argc, _TCHAR* argv[])
{
IplImage* image = cvLoadImage("lena.jpg");
//SmoothImage(image);
//doPyrDown(image);
doCanny(image ,10 , 100 , 3 );
system("pause");
return 0;
}