В настоящее время я использую следующий метод для извлечения связанных точек из входного изображения. :
Код: Выделить всё
std::vector GetConnectedPoints(cv::Mat& binaryImage) {
cv::Mat labels, stats, centroids;
int numComponents = cv::connectedComponentsWithStats(binaryImage, labels, stats, centroids);
std::vector components(numComponents);
for (int label = 1; label < stats.rows; ++label) {
int left = stats.at(label, cv::CC_STAT_LEFT);
int top = stats.at(label, cv::CC_STAT_TOP);
int width = stats.at(label, cv::CC_STAT_WIDTH);
int height = stats.at(label, cv::CC_STAT_HEIGHT);
for (int y = top; y < top + height; ++y) {
for (int x = left; x < left + width; ++x) {
if (labels.at(y, x) == label) {
components[label].emplace_back(x, y);
}
}
}
}
return components;
}

Исходное изображение:

Двоичное изображение:

Как объединить только те компоненты, которые являются сегментами одного круга? Мы будем очень признательны за любые рекомендации или коды по решению этой проблемы.
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/786 ... ame-circle