【OpenCV】影像變換(四-2)霍夫變換圓檢測
在上篇的博文中,我們重點討論了霍夫變換的線段檢測的數學原理,以及怎樣在OpenCV中去實現線段的檢測。在這篇博文中,關於圓的檢測的數學理論,我們不做重點介紹。我們將簡要介紹下OpenCV中自帶的基於霍夫變換的圓檢測函式cvHoughCircles()。
CvSeq* cvHoughCircles(
CvArr* image,//8位的影像,不過不需要是二值影像,可以是灰度圖
void* circle_storage,//儲存結果的儲存器
int method,//這個引數必須設定為CV_HOUGH_GRADIENT
double dp,//累加器影像的解析度,可設定為1或2,但是不能比1小
double min_dist,//讓演算法能明顯區分的兩個不同圓之間的最小距離
double param1=100,//邊緣閾值
double param2=300,//累加器閾值
int min_radius=0,
int max_radius=0//發現圓半徑的最小值和最大值
)
下面給出個程式的示例:
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
int main()
{
const char *pSrcWindow = "原圖";
const char *pDstWindow = "Hough圓檢測圖";
IplImage *pSrcImage = cvLoadImage("1.png", CV_LOAD_IMAGE_UNCHANGED);
IplImage *pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1);
//轉化為灰度圖
cvCvtColor(pSrcImage, pGrayImage, CV_BGR2GRAY);
//構建個儲存器,為後面的函式cvHoughCircles()傳參
CvMemStorage *circle_storage = cvCreateMemStorage();
double min_dst = pGrayImage->height / 10;
//呼叫cvHoughCircles()函式,函式返回的是個序列
CvSeq* results = cvHoughCircles(pGrayImage, circle_storage, CV_HOUGH_GRADIENT, 1, min_dst);
IplImage *pColorImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 3);
cvCvtColor(pGrayImage, pColorImage, CV_GRAY2BGR);
//將函式cvHoughCircles()檢測得到的結果,遍歷輸出,並且畫圖
for (int i = 0; i < results->total; ++i)
{
float *p = (float*)cvGetSeqElem(results, i);
cvCircle(pColorImage, cvPoint(cvRound(p[0]), cvRound(p[1])), cvRound(p[2]), CV_RGB(255, 0, 0), 2);
}
cvNamedWindow(pSrcWindow, CV_WINDOW_AUTOSIZE);
cvNamedWindow(pDstWindow, CV_WINDOW_AUTOSIZE);
cvShowImage(pSrcWindow, pSrcImage);
cvShowImage(pDstWindow, pColorImage);
cvWaitKey();
cvReleaseImage(&pSrcImage);
cvReleaseImage(&pGrayImage);
cvReleaseImage(&pColorImage);
cvReleaseMemStorage(&circle_storage);
cvDestroyWindow(pSrcWindow);
cvDestroyWindow(pDstWindow);
return 0;
}
相關文章
- 【OpenCV】影像變換(四-1)-霍夫變換線段檢測OpenCV
- 霍夫變換檢測圓
- 霍夫變換圓檢測原理及 OpenCV API 應用OpenCVAPI
- 霍夫檢測圓:霍夫梯度法梯度
- OpenCvSharp手繪ROI區域+模板匹配+霍夫變換檢測圓的邊界OpenCV
- 【OpenCV】影像的變換(三)-Canny邊緣檢測OpenCV
- OpenCV-Python教程(9)(10)(11): 使用霍夫變換檢測直線 直方圖均衡化 輪廓檢測OpenCVPython直方圖
- 計算機視覺 OpenCV Android | 基本特徵檢測之 霍夫圓檢計算機視覺OpenCVAndroid特徵
- 【OpenCV-Python】:影像的傅立葉變換與逆傅立葉變換OpenCVPython
- 用霍夫變換&SCNN碼一個車道追蹤器CNN
- OpenCV計算機視覺學習(11)——影像空間幾何變換(影像縮放,影像旋轉,影像翻轉,影像平移,仿射變換,映象變換)OpenCV計算機視覺
- OpenCV計算機視覺學習(3)——影像灰度線性變換與非線性變換(對數變換,伽馬變換)OpenCV計算機視覺
- Python 影像處理 OpenCV (5):影像的幾何變換PythonOpenCV
- Qt5&OpenCV3.2 Canny邊緣檢測+Hough變換QTOpenCV
- OpenGL模型檢視變換、投影變換、視口變換模型
- OpenCV 離散傅立葉變換OpenCV
- OpenCV計算機視覺學習(10)——影像變換(傅立葉變換,高通濾波,低通濾波)OpenCV計算機視覺
- 【OpenCV】影像變換(二)邊緣檢測:梯度運算元、Sobel運算元和Laplace運算元OpenCV梯度
- 3. OpenCV-Python——影像梯度演算法、邊緣檢測、影像金字塔與輪廓檢測、直方圖與傅立葉變換OpenCVPython梯度演算法直方圖
- Python 實現影像快速傅立葉變換和離散餘弦變換Python
- 影像尺寸變換scalepadding方法padding
- opencv 圖片幾何變換-縮放OpenCV
- opencv距離變換函式distanceTransformOpenCV函式ORM
- OpenGL 使用矩陣變換改變檢視矩陣
- 【影像處理筆記】小波變換筆記
- Opencv-Python 影象透視變換cv2.warpPerspectiveOpenCVPython
- OpenCV (iOS)中的形態學變換(11)OpenCViOS
- matlab練習程式(矩形變換為圓)Matlab
- 小波變換檢測訊號突變點的MATLAB實現Matlab
- [數字影像學筆記] 4.直方圖變換2筆記直方圖
- View Transform(檢視變換)詳解ViewORM
- Python的OpenCV轉換影像大小PythonOpenCV
- opencv 影像的型別轉換、影像的縮放OpenCV型別
- Hough變換
- 傅立葉變換
- 網頁影像漸變的方法(HTML+CSS) (漸變與切換)網頁HTMLCSS
- OpenCV 顏色空間轉換引數CV_BGR2GRAY改變OpenCV
- 仿射變換及其變換矩陣的理解矩陣