筆者將來需要用奧尼(Aoni)百腦通相影 HD720P 高清網絡攝像頭(Webcam)作智能小車或機械人的圖像處理,所以圖像邊緣檢測是必須的,在 OpenCV 內有坎尼邊緣檢測(Canny Edge Detector )函數,坎尼邊緣檢測(Canny Edge Detector )是由 John F. Canny 於1986年開發的,將來智能小車或機械人行走時便要使用這函數。
OpenCV 2.4 的坎尼圖像邊緣檢測(Canny Edge Detection) |
1‧Low error rate:Meaning a good detection of only existent edges。
2‧Good localization:The distance between edge pixels detected and real edge pixels have to be minimized。
3‧Minimal response:Only one detector response per edge。
Canny 邊緣檢測演算法可以分為以下 5 個步驟:
1‧應用高斯濾波來平滑圖像,目的是去除雜訊。
2‧找尋圖像的強度梯度(intensity gradients)。
3‧應用非最大抑制(non-maximum suppression)技術來消除邊誤檢(本來不是但檢測出來是)。
4‧應用雙閾值的方法來決定可能的(潛在的)邊界。
5‧利用滯後技術來跟蹤邊界。
操作系統:Windows XP 32-bit
操作環境:Windows Visual Studio 2010 C++/CLI + OpenCV 2.4.8
坎尼圖像邊緣檢測(Canny Edge Detection)程式:
// 圖像邊緣檢測
// Canny Edge Detection - Canny 函數
int edgeThresh = 50;
IplImage *pImgGray = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U, 1);
IplImage *pImgEdge = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U, 1);
cvCvtColor(pImg, pImgGray, CV_BGR2GRAY);
cvCanny(pImgGray, pImgEdge, edgeThresh, edgeThresh*3, 3);
int step =
pImgEdge->widthStep;
uchar* oData =
(uchar*)pImgEdge->imageData;
IplImage* nImg =
cvCreateImage(cvSize(pImgEdge->width,pImgEdge->height),IPL_DEPTH_8U,3);
int nStep =
nImg->widthStep;
int nChannels =
nImg->nChannels;
uchar* nData = (uchar
*)nImg->imageData;
for (int j = 0;
j
for (int i = 0;
i
int counter =
j*nStep + i*nChannels;
nData[counter+ 0] = oData[j*step
+ i]; // Blue
nData[counter+
1] = oData[j*step + i]; // Green
nData[counter+
2] = oData[j*step + i]; // Red
}
}
pictureBox2->Image = gcnew
System::Drawing::Bitmap(frame->width,frame->height,
frame->widthStep,System::Drawing::Imaging::PixelFormat::Format24bppRgb,
(System::IntPtr)
nImg->imageData);
pictureBox2->Refresh();
} // End If Canny Edge Detection
|
OpenCV 中的 Canny 函數:
採用 Canny 演算法做邊緣檢測
void cvCanny( const CvArr* image, CvArr* edges, double threshold1,double threshold2, int aperture_size=3 );
image = 輸入圖像
edges = 的邊緣圖像
threshold1 = 一個閾值
threshold2 = 第二個閾值
aperture_size = Sobel 運算元內核大小 (見 cvSobel)
函數 cvCanny 採用 CANNY 演算法發現輸入圖像的邊緣而且在輸出圖像中標識這些邊緣。threshold1 和 threshold2 當中的小閾值用來控制邊緣連接,大的閾值用來控制強邊緣的初始分割。
相關網址:
※ 在 Windows XP Visual Studio 2010 安裝 OpenCV 2.4
※ 在 Windows XP Visual Studio 2010 使用 OpenCV 2.4 第一個程式
※ 在 Windows XP Visual Studio 2010 使用 OpenCV 2.4 使用 WebCam
※ 在 Windows XP Visual Studio 2010 安裝使用 FFmpeg 函數庫
※ 在 Windows XP Visual Studio 2010 使用 OpenCV 2.4 使用 WebCam
※ 在 Windows XP Visual Studio 2010 使用 OpenCV 2.4 顯示 IPCam 串流視頻
※ 在 Windows XP Visual Studio 2010 使用 OpenCV 2.4 導入屬性工作表文件檔
※ 在 Windows XP Visual Studio 2010 使用 Windows From OpenCV 2.4 配置
※ 在 OpenCV 2.4 的 IplImage 資料結構
※ OpenCV 2.4 的坎尼圖像邊緣檢測(Canny Edge Detection) – Canny 函數
※ OpenCV 2.4 的霍夫直線偵測轉換 – HoughLines 函數
※ OpenCV 2.4 的霍夫直線偵測轉換 – HoughLinesP 函數
※ OpenCV 2.4 的人臉偵測(Face Detection)– cvHaarDetectObjects 函數
※ OpenCV 2.4 的物件偵測(Object Detection)– cvHoughCircles 函數
※ OpenCV 2.4 的物件追蹤(Object Tracking)– cvMoments 函數
2015 年 9月 20日 天氣報告
氣溫:28.0度 @ 20:10
相對濕度:百分之 77%
天氣:大致多雲
沒有留言:
張貼留言