Я пытаюсь обнаружить, локализовать и собрать синий мрамор. Цель моего проекта - обнаружить только 1 мрамор за раз. Для моего обнаружения я использую функцию HoughCircles из OpenCV. Я хотел бы, чтобы код давал мне позиции 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 информацию для всех кругов. Я попытался изменить circles.size()
на 1
в for l oop, но это дает мне следующую ошибку: Выражение: векторный индекс находится вне диапазона
Может ли кто-нибудь здесь быть в состоянии чтобы помочь мне, это мое первое приложение OpenCV, так что извините, если я неправильно понимаю.
Если вам нужен мой полный код, не стесняйтесь спрашивать.