То, что я делаю, это после предварительной обработки изображения (путем установки порога) найти контуры изображения.
И я хочу получить Дискретный Дескриптор Фурье каждого контура (используя функцию 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) неправильный ….
Вывод findContours является вектором< вектор< Точка>>. Вы предоставляете вектор< Mat>. Это допустимое использование (хотя и немного неясное), но вы должны помнить, что элементы типа в матрице — это int. DFT, с другой стороны, работает только с матрицами с плавающей точкой. Это то, что вызывает сбой. Ты можешь использовать преобразовать в функция для создания матриц правильного типа.
Также я не уверен, что вывод будет иметь какое-либо значение для любых вычислений, которые вы делаете. Насколько я знаю, преобразование Фурье должно работать с сигналом, а не с координатами, которые извлекаются из него.
Просто стилистическое замечание: более чистый способ выполнить тот же порог
img = (img > thresh);
Других решений пока нет …