【OpenCV】影像的變換(三)-Canny邊緣檢測
在上篇的博文中,我們重點討論了影像變換中的兩種典型邊緣檢測運算元,分別是Sobel運算元和Laplace運算元,並且給出了OpenCV中自帶函式cvSobel()和cvLaplace()。這篇博文中,將重點介紹一種常用的邊緣檢測運算元-Canny運算元。
關於Canny運算元的數學理論,在這篇博文中,我們將不做重點介紹,可以參閱以下的博文:
http://www.cnblogs.com/cfantaisie/archive/2011/06/05/2073168.html
總得說來,對影像進行Canny邊緣檢測的大致步驟:
1、用高斯濾波器進行影像平滑
2、用一階偏導的有限差分計算梯度的幅值和方向
3、對梯度幅值進行非極大值抑制
4、用雙閾值演算法檢測和連線邊緣
但是Canny運算元得到的邊緣並沒有將整個輪廓作為一個整體,只是檢測出了輪廓邊界的畫素,輪廓的問題,我們在以前的博文中也已經討論過,在這裡不做介紹。OpenCV中給出了函式cvCanny()來對影像進行邊緣檢測。
void cvCanny(
const CvArr* img,//輸入影像,必須為灰度圖
CvArr* edges,//輸出影像,其實也是灰度圖
double lowThresh,//下限閾值
double highThresh,//上限閾值
int aperturesize=3//核心大小
)
下面給出個程式示例:
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
int main()
{
const char *windows1 = "原圖";
const char *windows2 = "Canny圖";
IplImage *pSrcImage = cvLoadImage("3.jpg", CV_LOAD_IMAGE_GRAYSCALE);
IplImage *pDstImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1);
cvCanny(pSrcImage, pDstImage, 50, 150, 3);
cvNamedWindow(windows1, CV_WINDOW_AUTOSIZE);
cvNamedWindow(windows2, CV_WINDOW_AUTOSIZE);
cvShowImage(windows1,pSrcImage);
cvShowImage(windows2, pDstImage);
cvWaitKey();
cvDestroyWindow(windows1);
cvDestroyWindow(windows2);
cvReleaseImage(&pSrcImage);
cvReleaseImage(&pDstImage);
return 0;
}
執行結果如下:
上述的程式中在呼叫cvCanny()函式的時候,我們將其中的引數threshold的值固定為50,其實為了更好的實現動態的引數canny邊緣檢測,可以呼叫cvCreateTrackbar()函式程式設計,不停的改變引數,觀察不同引數下的Canny邊緣檢測效果。下面給出這個程式的示例的部落格連結,大家感興趣的話,可以參閱下:
http://blog.csdn.net/morewindows/article/details/8239625/
相關文章
- Qt5&OpenCV3.2 Canny邊緣檢測+Hough變換QTOpenCV
- opencv——自適應閾值Canny邊緣檢測OpenCV
- OPENCV例程2 :CANNY運算元邊緣檢測OpenCV
- OpenCV(iOS)的邊緣檢測和Canny運算元OpenCViOS
- 3.Canny邊緣檢測
- 邊緣檢測演算法——Canny和LoG邊緣檢測演算法演算法
- 影像的邊緣檢測
- 影像邊緣檢測
- 【OpenCV】影像變換(二)邊緣檢測:梯度運算元、Sobel運算元和Laplace運算元OpenCV梯度
- 【OpenCV】影像變換(四-2)霍夫變換圓檢測OpenCV
- opencv學習之邊緣檢測OpenCV
- 3. OpenCV-Python——影像梯度演算法、邊緣檢測、影像金字塔與輪廓檢測、直方圖與傅立葉變換OpenCVPython梯度演算法直方圖
- 【OpenCV】影像變換(四-1)-霍夫變換線段檢測OpenCV
- python+opencv邊緣檢測方法整理PythonOpenCV
- OpenCV-Python教程(6)(7)(8): Sobel運算元 Laplacian運算元 Canny邊緣檢測OpenCVPython
- Opencv-Python學習筆記十——影像梯度、邊緣檢測 Gradient, Edge DetectionOpenCVPython筆記梯度
- 詳解數字影像的濾波和邊緣檢測
- opencv 邊緣羽化,邊緣過渡OpenCV
- Python 影像處理 OpenCV (13): Scharr 運算元和 LOG 運算元邊緣檢測技術PythonOpenCV
- 大津法——邊緣檢測
- 【OpenCV-Python】:影像的傅立葉變換與逆傅立葉變換OpenCVPython
- Python 影像處理 OpenCV (5):影像的幾何變換PythonOpenCV
- 影象特徵提取:Sobel邊緣檢測特徵
- Marr-Hildreth邊緣檢測器
- 霍夫變換圓檢測原理及 OpenCV API 應用OpenCVAPI
- 【OpenCV3經典程式設計100例】(10)邊緣檢測:用Sobel()函OpenCV程式設計
- OpenCV計算機視覺學習(11)——影像空間幾何變換(影像縮放,影像旋轉,影像翻轉,影像平移,仿射變換,映象變換)OpenCV計算機視覺
- Laplacian(iOS)運算元(邊緣檢測)iOS
- opencv 影像的型別轉換、影像的縮放OpenCV型別
- Python的OpenCV轉換影像大小PythonOpenCV
- 卷積神經網路1-邊緣檢測卷積神經網路
- OpenCV7影像金字塔與輪廓檢測OpenCV
- php 實現一個簡單的圖片邊緣檢測PHP
- 視訊人臉檢測——OpenCV版(三)OpenCV
- Python 影像處理 OpenCV (12): Roberts 運算元、 Prewitt 運算元、 Sobel 運算元和 Laplacian 運算元邊緣檢測技術PythonOpenCV
- 學習OpenCV:濾鏡系列(15)——羽化(模糊邊緣)OpenCV
- 影象邊緣檢測—sobel運算元(灰度影象,彩色影象)
- OpenCV計算機視覺學習(3)——影像灰度線性變換與非線性變換(對數變換,伽馬變換)OpenCV計算機視覺