天天看点

【OpenCV学习】四、一个复杂一点的变换(缩放、边缘检测)

 对图像进行缩放,并进行Canny边缘检测。(《学习OpenCV》P28-30)

cvPyrDown函数把输入图像放到一个不同大小的输出图像中去,完成图像的缩放。

cvCanny利用Canny算子计算图像中图形的边缘。

#include "cv.h"
#include "highgui.h"

IplImage* doPyrDown(IplImage* in, int filter = IPL_GAUSSIAN_5x5){
	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);
	return(out);
}

IplImage* doCanny(IplImage* in, double lowThresh, double highThresh, double aperture){
	//if (in->nChannels != 1)
	//return 0;
	IplImage* out = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1);
	cvCanny(in, out, lowThresh, highThresh, aperture);
	return(out);
}

int main(){
	//缩小
	IplImage* img = cvLoadImage("D:\\OPENCV实验\\lena.jpg");
	cvNamedWindow("原图", CV_WINDOW_AUTOSIZE);
	cvNamedWindow("缩小", CV_WINDOW_AUTOSIZE);
	cvShowImage("原图", img);
	cvShowImage("缩小", doPyrDown(img));

	//边缘检测
	cvNamedWindow("Canny", CV_WINDOW_AUTOSIZE);
	IplImage* out = doCanny(img, 5, 50, 3);
	cvShowImage("Canny", out);
	cvWaitKey(0);

	cvReleaseImage(&img);
	cvReleaseImage(&out);
	cvDestroyAllWindows();
	return 0;
}
           

结果:

【OpenCV学习】四、一个复杂一点的变换(缩放、边缘检测)