OpenCV入門:影象邊緣提取
阿新 • • 發佈:2019-01-31
本文將介紹如何利用OpenCV進行邊緣提取,原始碼如下:
其中,cvCanny採用canny演算法對影象的邊緣檢測,其宣告為:// // 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; }
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 當中的小閾值用來控制邊緣連線,大的閾值用來控制強邊緣的初始分割。