Не могу конвертировать с помощью cvMerge, DFT - PullRequest
0 голосов
/ 30 ноября 2011

Я пытаюсь сделать dft одного одиночного канала изображения, и поскольку cvDft ожидает комплексных значений, мне посоветовали объединить исходное изображение с другим изображением со всеми нулями, так что это последнее будет рассматриваться как мнимая часть.

Моя проблема возникает при использовании функции cvmerge,

Mat tmp = imread(filename,0);

if( tmp.empty() )
    {cout << "Usage: dft <image_name>" << endl;
    return -1;}
Mat Result(tmp.rows,tmp.cols,CV_64F,2);
Mat tmp1(tmp.rows,tmp.cols,CV_64F, 0);
Mat image(tmp.rows,tmp.cols,CV_64F,2);
cvMerge(tmp,tmp1,image);`

Это дает мне следующую ошибку: не может конвертировать cvMAt в cvArr

Кто-нибудь может мне помочь?спасибо!

1 Ответ

1 голос
/ 30 ноября 2011

1) кажется, что вы смешиваете 2 разных стиля кода opencv cv::Mat (- Mat) - это класс c ++ из новой версии opencv, cvMerge - это функция ac из старой версии opencv.

вместо cvmerge используйте merge

2) вы пытаетесь объединить матрицу (tmp) типа CV_8U (возможно) сa CV_64F используйте convertTo , чтобы получить tmp как CV_64F

3), почему ваши Result & image маты (целевой коврик) инициализируются в cv::Scalar(2)?Я думаю, что вы неправильно используете параметры constractor.см. здесь для получения дополнительной информации.

4) вы image мат - одноканальный мат, и вы хотели его как 2-канальный мат (как упоминалось в вопросе), изменитедекларация к

Mat image(tmp.rows,tmp.cols,CV_64FC2);
...