Я работаю над проектом изображения и пытаюсь создать алгоритм подключения компонентов.Вот что я придумал:
Mat OPG3::cc(Mat imgCC) {
int p = 1;
int lable = 1;
copyMakeBorder(imgCC, imgCC, p, p, p, p, BORDER_CONSTANT, 0);
for (int imgRow = p; imgRow < imgCC.rows - p; imgRow++) {
for (int imgCol = p; imgCol < imgCC.cols - p; imgCol++) {
if (imgCC.at < uchar >(imgRow,imgCol) == 255) {
imgCC.at<uchar>(imgRow, imgCol) = lable;
recursive(imgRow, imgCol - 1, lable, p, imgCC);
recursive(imgRow + 1, imgCol, lable, p, imgCC);
recursive(imgRow, imgCol + 1, lable, p, imgCC);
recursive(imgRow - 1, imgCol, lable, p, imgCC);
++lable;
}
}
}
return imgCC;
}
void OPG3::recursive(int i, int j, int lable, int p, Mat& imgCC) {
if (imgCC.at < uchar >(i, j) == 255) {
imgCC.at<uchar>(i, j) = lable;
recursive(i, j - 1, lable, p, imgCC);
recursive(i + 1, j, lable, p, imgCC);
recursive(i, j + 1, lable, p, imgCC);
recursive(i - 1, j, lable, p, imgCC);
}
}
Когда я запускаю код, он останавливается в середине выполнения с некоторыми изображениями, но с другими программами он выполняется правильно.
IsВозможно, что алгоритм в некоторых случаях делает слишком много вызовов функций?