HoughCircles() 是 OpenCV 库中的一个函数,用于在图像中检测圆形。这个函数基于霍夫变换(Hough Transform)的原理,通过投票机制来识别图像中的圆形结构。以下是关于 HoughCircles() 函数的基础概念、优势、类型、应用场景以及可能遇到的问题和解决方法:
dp
:累加器分辨率与图像分辨率的反比。minDist
:检测到的圆心之间的最小距离。param1
:Canny 边缘检测的高阈值。param2
:累加器阈值,越小检测到的圆越多。minRadius
和 maxRadius
:检测圆的最小和最大半径。#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
cv::Mat src = cv::imread("circles.jpg", cv::IMREAD_COLOR);
if (src.empty()) {
std::cout << "Could not open or find the image!" << std::endl;
return -1;
}
cv::Mat gray;
cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);
cv::GaussianBlur(gray, gray, cv::Size(9, 9), 2, 2);
std::vector<cv::Vec3f> circles;
cv::HoughCircles(gray, circles, cv::HOUGH_GRADIENT, 1, gray.rows / 8, 200, 100, 0, 0);
for (size_t i = 0; i < circles.size(); i++) {
cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
cv::circle(src, center, 3, cv::Scalar(0, 255, 0), -1, 8, 0); // center
cv::circle(src, center, radius, cv::Scalar(0, 0, 255), 3, 8, 0); // border
}
cv::imshow("Detected Circles", src);
cv::waitKey(0);
return 0;
}
param2
阈值,降低它以便检测到更多的圆。minDist
参数以避免检测到过于接近的圆。dp
值。通过合理调整这些参数,可以有效地提高圆形检测的准确性和效率。
领取专属 10元无门槛券
手把手带您无忧上云