В настоящее время я переписываю программу Matlab в OpenCV и не могу найти эквивалент функции bwconvhull
.
Код Matlab выполняет следующие действия:
H = bwconvhull(W>0.5);
Где W
- это матрица со значениями с плавающей запятой (которая была рассчитана на основе нескольких карт расстояний в предыдущей части алгоритма).
Я успешно нашел способ вычисления W
в OpenCV -в результате cv::Mat
с типом 32FC1
.
Моя первая попытка использовала простой перевод:
cv::convexHull(w>0.5, h);
Это происходит со следующим исключением:
OpenCV(3.4.1) \opencv\modules\imgproc\src\convhull.cpp:137:
error: (-215) total >= 0 && (depth == 5 || depth == 4)
in function cv::convexHull
Iпроверили исходный код и выяснили, что проблема в типе Mat
- (оператор >
производит 8U
mat, в то время как алгоритм поддерживает только 32F
и 32S
).Поэтому я попробовал преобразование:
cv::Mat w2;
w = (w > 0.5);
w.convertTo(w2, CV_32F);
cv::convexHull(w2, h);
Но теперь проблема переходит в состояние total >= 0
, где total
равно w.checkVector(2)
.Я не могу понять, как выполнить это условие, чтобы оно выполнялось.
Я также попробовал следующий подход с тем же результатом:
cv::Mat w2 = w * ( w > 0.5 );
cv::convexHull(w2, h);
Другие мои попытки включали cv::threshold
и cv::findContours
, но те, которые потерпели неудачу подобным образом.
Я действительно неопытен в OpenCV и буду благодарен за любой указатель в правильном направлении.