Код: Выделить всё
void test_convexityDefects(
const cv::Mat& binary_,
std::vector concave_points_) {
concave_points_.clear();
std::vector contours;
cv::findContours(binary_, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
for (auto& cnt : contours) {
std::vector hullIndices;
cv::convexHull(cnt, hullIndices, false, false);
std::vector defects;
if (cnt.size() >= 3 && hullIndices.size() >= 3) {
cv::convexityDefects(cnt, hullIndices, defects);
std::vector farPoints;
for (const auto& d : defects) {
int farIdx = d[2];
float depth = d[3] / 256.0f;
if (depth > 1) {
concave_points_.push_back(cnt[farIdx]);
}
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ty-defects