用C语言对OpenCV中hough变换检测出来的圆画圆
时间: 2024-09-20 15:07:45 浏览: 85
在C语言中使用OpenCV进行霍夫圆变换(Hough Circle Transform)并绘制检测出的圆,需要先完成以下几个步骤:
1. **库引入**:
首先,确保已经包含了OpenCV库,并导入必要的头文件。
```c
#include <opencv2/objdetect.hpp>
#include <opencv2/highgui/highgui.h>
#include <opencv2/imgproc/imgproc.h>
```
2. **读取图像**:
使用`cvLoadImage`函数加载图片到一个Mat对象中。
```c
IplImage* img = cvLoadImage("input.jpg", CV_LOAD_IMAGE_GRAYSCALE);
```
3. **Hough圆变换**:
应用`cvHoughCircles`函数对灰度图像进行圆检测。传入参数包括输入图像、半径范围、阈值等。
```c
CvMemStorage* storage = cvCreateMemStorage(0);
int circlesDetected;
cv::vector<cv::Point> circles;
cvHoughCircles(img, storage, CV_HOUGH_GRADIENT, 1, img->height / 8, 200, 100, 0, 0);
circlesDetected = circles.size();
```
4. **处理结果**:
如果有圆被检测出来,遍历`circles`向量,并在原始图像上绘制每个圆。
```c
for (int i = 0; i < circlesDetected; i++) {
CvPoint center(cvRound(circles[i].x), cvRound(circles[i].y));
int radius = cvRound(circles[i].size);
cvCircle(img, center, radius, CV_RGB(0, 255, 0), 2, 8, 0); // 绘制绿色圆
}
```
5. **显示结果**:
最后,使用`cvNamedWindow`和`cvShowImage`函数展示处理后的图像。
```c
cvNamedWindow("Detected Circles", CV_WINDOW_NORMAL);
cvShowImage("Detected Circles", img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyAllWindows();
```
阅读全文