gpt4 book ai didi

c++ - OpenCV HoughCircles仅检测1个圆

转载 作者:行者123 更新时间:2023-12-02 17:22:43 26 4
gpt4 key购买 nike

我正在尝试检测和定位蓝色大理石。
我的项目的目的是一次仅检测1个大理石。
为了进行检测,我使用了OpenCV的HoughCircles函数。我想将代码仅在第一个检测到的圆上给我X和Y位置。

这是我用于此的代码:

vector<Vec3f> circles;
HoughCircles(OutputImage, circles, HOUGH_GRADIENT, 1,
OutputImage.rows / rows, //change to detect circles that are closer to eachother
para1, para2, minRad, maxRad); //chang last to parameters to detect larger or smaller circles


for (size_t i = 0; i < circles.size(); i++)
{
Vec3i c = circles[i];
Point center = Point(c[0], c[1]);
// circle center
circle(imgHSV, center, 1, Scalar(0, 255, 0), 3, LINE_AA);
// circle outline
int radius = c[2];
circle(imgHSV, center, radius, Scalar(255, 0, 0), 3, LINE_AA);

cout << "The center of the detection is located at pixel: " << Point(c[0], c[1]) << endl;

x = c[0];
y = c[1];


}

但是,这仍然会检测到所有圆并打印出所有圆的X,Y信息。
我曾尝试在for循环中将 circles.size()更改为 1,但这给了我以下错误:
Expression: vector subscript out of range

请问有人可以帮助我,这是我的第一个OpenCV应用程序,如果我误解了,抱歉。

如果您需要我的完整代码,请随时询问。

最佳答案

HoughCircles方法为您提供了所有找到的圈子:
要访问“第一个”圈子,您需要执行以下操作:

if(circles.size() > 0) {
Vec3i c = circles.at(0);
Point center = Point(c[0], c[1]);
// circle center
circle(imgHSV, center, 1, Scalar(0, 255, 0), 3, LINE_AA);
// circle outline
int radius = c[2];
circle(imgHSV, center, radius, Scalar(255, 0, 0), 3, LINE_AA);

cout << "The center of the detection is located at pixel: " << Point(c[0], c[1]) << endl;

x = c[0];
y = c[1];
}
但是在我看来,您的问题似乎是您不理解所编写的C++代码...

关于c++ - OpenCV HoughCircles仅检测1个圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61360787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com