1. 程式人生 > >OpenCV入門:影象邊緣提取

OpenCV入門:影象邊緣提取

本文將介紹如何利用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 當中的小閾值用來控制邊緣連線,大的閾值用來控制強邊緣的初始分割。