转自:https://blog.csdn.net/tutu1583/article/details/79058896
OpenCV库是一个开源的集成库,用于图像处理非常方便,下面是我做的基于OpenCV的Canny边缘检测。
这是我的main.cpp
#include <iostream>
#include <opencv2\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv\cv.hpp>
#include "TestImage.h"
int main(int argc, char** argv)
{
IplImage* img = cvLoadImage("lena.jpg",CV_LOAD_IMAGE_GRAYSCALE);
//smoothing_Image(img);//将图像平滑处理
cvNamedWindow("Image-in", CV_WINDOW_AUTOSIZE);
cvShowImage("Image-in",img );
//img = doPyrDown(img, CV_GAUSSIAN_5x5);//调整图像为输入图像的宽度和高度的一半
img = doCanny(img,10,100,3);//对灰度级图像进行canny边缘检测
cvNamedWindow("Image-out", CV_WINDOW_AUTOSIZE);
//cvNamedWindow("Image-out", CV_WINDOW_AUTOSIZE);
cvShowImage("Image-out", img);
cvReleaseImage(&img);//释放内存
cvWaitKey(0);
cvDestroyWindow("Image-in");
cvDestroyWindow("Image-out");
return(0);
}
下面是我的TestImage.h
#ifndef __TESTIMAGE_H__
#define __TESTIMAGE_H__
#include <iostream>
#include <opencv2\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv\cv.hpp>
//Canny边缘检测将输出写入一个单通道(灰度级)图像
//code IplImage* img1 = doCanny(img,lowThresh,highThresh,aperture);
IplImage* doCanny(
IplImage* in,
double lowThresh,
double highThresh,
double aperture)
{
if (in->nChannels != 1)
return(0);//canny只能处理灰度级图像
IplImage* out = cvCreateImage(
//CvSize(cvGetSize(in)),
cvGetSize(in),
IPL_DEPTH_8U,
1);
cvCanny(in, out, lowThresh, highThresh, aperture);
return(out);
}
#endif