本文将介绍如何利用OpenCV进行边缘提取,源代码如下:
//
// main.cpp
// Edge_Detection
//
// Created by 黄露 on 16/3/21.
// Copyright © 2016年 huanglu_thu13. All rights reserved.
//
#include "cv.h"
#include "highgui.h"
int main(int argc, const char * argv[]) {
//创建两个窗口显示处理前后的图片
cvNamedWindow("Imgae Before Processing");
cvNamedWindow("Image After Processing");
//创建图像指针,加载图像至内存
IplImage * in = cvLoadImage("/Users/huanglu/Pictures/thusada.jpg",1);
//创建一个图像来存储处理后的图片
IplImage * out = cvCreateImage(cvGetSize(in), in->depth, 1);
//设置上下阈值和算子内核大小
double low = 10;
double high = 100;
double aperture = 3;
//进行边缘提取
cvCanny(in, out, low, high, aperture);
//显示处理前后的图片
cvShowImage("Imgae Before Processing", in);
cvShowImage("Imgae After Processing", out);
//释放图像指针
cvReleaseImage(&in);
cvReleaseImage(&out);
//等待用户输入任意键结束
cvWaitKey(0);
//释放两个窗口
cvDestroyWindow("Imgae Before Processing");
cvDestroyWindow("Imgae After Processing");
return 0;
}
其中,cvCanny采用canny算法对图像的边缘检测,其声明为:
void cvCanny( const CvArr* image,CvArr* edges,double threshold1,double threshold2, int aperture_size=3 );
其中
image 输入单通道图像(可以是彩色图像)对于多通道的图像可以用cvCvtColor()修改。
edges 输出的边缘图像 ,也是单通道的,但是是黑白的
threshold1 第一个阈值
threshold2 第二个阈值
aperture_size Sobel 算子内核大小
函数 cvCanny 采用 Canny 算法发现输入图像的边缘而且在输出图像中标识这些边缘。threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。