Как использовать cv :: findcontours и DFT? Это вызывает ошибку отладки

То, что я делаю, это после предварительной обработки изображения (путем установки порога) найти контуры изображения.
И я хочу получить Дискретный Дескриптор Фурье каждого контура (используя функцию dft ())
Мой код следует,

vector<Mat> contourLines1;
vector<Mat> contourLines2;

getContourLine(exC1, contourLines1, binThreshold, numOfErosions);
getContourLine(exC2, contourLines2, binThreshold, numOfErosions);

// calculate fourier descriptor
Mat fd1 = makeFD(contourLines1.front());
Mat fd2 = makeFD(contourLines2.front());

/////////////////////////

void getContourLine(Mat& img, vector<Mat>& objList, int thresh, int k){
threshold(img,img,thresh,255,THRESH_BINARY);
erode(img,img,0,cv::Point(-1,-1),k);
cv::findContours(img,objList,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
}

/////////////////////////

Mat makeFD(Mat& contour){
Mat result;
dft(contour,result,DFT_ROWS);
return result;
}

В чем проблема??? Я не могу найти это .. Я думаю, что тип параметров функций (таких как cv :: finContours или dft) неправильный ….

1

Решение

Вывод findContours является вектором< вектор< Точка>>. Вы предоставляете вектор< Mat>. Это допустимое использование (хотя и немного неясное), но вы должны помнить, что элементы типа в матрице — это int. DFT, с другой стороны, работает только с матрицами с плавающей точкой. Это то, что вызывает сбой. Ты можешь использовать преобразовать в функция для создания матриц правильного типа.

Также я не уверен, что вывод будет иметь какое-либо значение для любых вычислений, которые вы делаете. Насколько я знаю, преобразование Фурье должно работать с сигналом, а не с координатами, которые извлекаются из него.

Просто стилистическое замечание: более чистый способ выполнить тот же порог

img = (img > thresh);
1

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

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

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