сравнить значение пикселя с int

у меня есть Mat Dist (CV_8U) сделано distanceTransform,

Теперь я должен проверить каждую координату Dist является > 0 и изменить значение другого Mat M = Mat :: zeros

код

      int main(){
....

for(i=0;i<Dist.rows;++i)
{
for(j=0;j<Dist.cols;++j)
{
if(Dist.at<uchar>(i,j) > 0){
M.at<uchar>(i,j)=2;
}
}
}
....
}

но у меня ошибка cv :: исключение.

Я посмотрел в документации и в других местах, я пытался перейти с uchar на vec3b. Я изменил исключение в визуальной студии 2015, но ничего.
Где я не прав?

0

Решение

Функция distanceTransform не возвращает объявление CV_8U, это CV_32, как мы видим в документация:

dst — вывод изображения с рассчитанными расстояниями. Это 32-битный
одноканальное изображение с плавающей точкой того же размера, что и src.

Так что код должен читать не учар, а плавать

...
if(Dist.at<float>(i,j) > 0.f)
...

Если вы использовали метки от преобразования расстояния, в документации мы имеем следующее:

Ярлыки — Опциональный вывод 2D массива этикеток (дискретный Вороной
диаграмма). Он имеет тип CV_32SC1 и тот же размер, что и src. Увидеть
подробности ниже.

Таким образом, в этом случае вы должны получить к нему доступ

...
if(Dist.at<int>(i,j) > 0)
...

Я надеюсь, это поможет вам.

Кстати, возможно, значение эпсилона вместо 0 будет лучше ….

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]