HoughCircles()圆检测的正确阈值opencv c++; 我想用C++中的OpenCV来检测图像中的圆。我尝试了dp、parm1和parm2的各种阈值,但找不到正确的阈值
圆的半径约为40像素。 我添加了一个指向示例图像的链接。我需要在HoughCircles()中使用哪些值才能获得正确的结果HoughCircles()圆检测的正确阈值opencv c++; 我想用C++中的OpenCV来检测图像中的圆。我尝试了dp、parm1和parm2的各种阈值,但找不到正确的阈值,c++,opencv,C++,Opencv,圆的半径约为40像素。 我添加了一个指向示例图像的链接。我需要在HoughCircles()中使用哪些值才能获得正确的结果 链接到示例。您可以使用以下参数值。这些设置可以检测图像中的圆圈 cv::Mat img = cv::imread("75.bmp"); cv::Mat img_gray; cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY); img_gray.convertTo(img_gray, CV_8UC1); std:
链接到示例。您可以使用以下参数值。这些设置可以检测图像中的圆圈
cv::Mat img = cv::imread("75.bmp");
cv::Mat img_gray;
cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);
img_gray.convertTo(img_gray, CV_8UC1);
std::vector<cv::Vec3f> circles;
double minDist = 20;
double dp = 1;
double param1 = 200;
double param2 = 10;
int minRadius = 15;
int maxRadius = 25;
cv::HoughCircles(img_gray, circles, cv::HOUGH_GRADIENT, dp, minDist, param1, param2, minRadius, maxRadius);
if (circles.size() > 0) {
for (size_t current_circle = 0; current_circle < circles.size(); ++current_circle) {
cv::Point center(std::round(circles[current_circle][0]), std::round(circles[current_circle][1]));
int radius = std::round(circles[current_circle][2]);
cv::circle(img, center, radius, cv::Scalar(0, 255, 0), 1);
}
}
cv::Mat img=cv::imread(“75.bmp”);
cv::Mat img_gray;
cv::CVT颜色(img、img_灰色、cv::颜色_BGR2灰色);
img_gray.convertTo(img_gray,CV_8UC1);
std::向量圆;
双重正念者=20;
双dp=1;
双参数1=200;
双参数2=10;
int minRadius=15;
int最大半径=25;
cv::HoughCircles(img_gray,圆圈,cv::HOUGH_渐变,dp,Minist,param1,param2,minRadius,maxRadius);
如果(圆圈.size()>0){
用于(大小为当前圆=0;当前圆<圆。大小();+当前圆){
cv::点中心(标准::圆(圆[当前圆][0]),标准::圆(圆[当前圆][1]);
int radius=std::round(圆[current_circle][2]);
cv::圆(img,中心,半径,cv::标量(0,255,0),1);
}
}
我也许应该看看这个函数()的文档,其中详细解释了如何选择函数参数。谢谢,我已经看过了,但我不清楚parm1 parm2和dp在做什么。所以我尝试了不同的值,但对我的示例图像不起作用。您有没有建议我需要使用哪个值,以便在所有样本图像中检测圆?