赞
踩
cv::HoughCircles
是 OpenCV 中的一个函数,用于检测图像中的圆。它使用霍夫变换算法来识别图像中圆形的轮廓。以下是 cv::HoughCircles
的用法和详细解释。
- void cv::HoughCircles(
- const cv::Mat& image,
- std::vector<cv::Vec3f>& circles,
- int method,
- double dp,
- double minDist,
- double param1,
- double param2,
- int minRadius = 0,
- int maxRadius = 0
- );
image
:
const cv::Mat&
cv::Canny
边缘检测器通常用于此目的。circles
:
std::vector<cv::Vec3f>&
cv::Vec3f
包含三个值:x
和 y
表示圆心的坐标,z
表示圆的半径。method
:
int
cv::HOUGH_GRADIENT
。这是霍夫变换检测圆的常用方法。dp
:
double
dp
是一个正浮点数,通常设置为 1,即累加器和图像具有相同的分辨率。minDist
:
double
param1
:
double
param2
:
double
minRadius
:
int
(可选)maxRadius
:
int
(可选)以下是一个完整的 C++ 示例,演示如何使用 cv::HoughCircles
检测图像中的圆,并在图像上绘制检测到的圆:
- #include <opencv2/opencv.hpp>
- #include <iostream>
-
- int main() {
- // 读取图像
- cv::Mat img = cv::imread("clock.jpg");
- if (img.empty()) {
- std::cerr << "Error: Image not found!" << std::endl;
- return -1;
- }
-
- cv::Mat gray;
- cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);
-
- // 预处理
- cv::Mat blurred;
- cv::GaussianBlur(gray, blurred, cv::Size(9, 9), 2, 2);
- cv::Mat edges;
- cv::Canny(blurred, edges, 50, 150);
-
- // 检测圆
- std::vector<cv::Vec3f> circles;
- cv::HoughCircles(edges, circles, cv::HOUGH_GRADIENT, 1, edges.rows / 8, 200, 100, 0, 0);
-
- // 绘制圆
- for (const auto& circle : circles) {
- cv::Point center(cvRound(circle[0]), cvRound(circle[1]));
- int radius = cvRound(circle[2]);
-
- // 绘制圆
- cv::circle(img, center, radius, cv::Scalar(0, 255, 0), 2);
- // 绘制圆心
- cv::circle(img, center, 3, cv::Scalar(0, 0, 255), -1);
- }
-
- // 显示结果
- cv::imshow("Detected Circles", img);
- cv::waitKey(0);
-
- return 0;
- }

图像读取和转换:
预处理:
圆检测:
cv::HoughCircles
检测圆。绘制和显示结果:
cv::HoughCircles
的参数值可能需要根据具体的应用场景进行调整,以获得最佳的检测效果。通过掌握 cv::HoughCircles
的使用方法,可以有效地在图像中检测圆形对象,适用于许多计算机视觉和图像处理应用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。