0

我正在尝试制作一个单通道图像的 dft,并且由于 cvDft 期望复杂的值,我被建议将原始图像与另一个全为 0 的图像合并,因此最后一个将被视为虚部。

我的问题是在使用 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

任何人都可以帮助我吗?谢谢!

4

1 回答 1

1

1)看起来你混合了2种不同风格的opencv代码 cv::Mat(-Mat)是来自新版本opencv的c ++类,cvMerge是来自旧版本opencv的ac函数。

而不是使用cvmerge使用合​​并

2)您正在尝试将tmp类型CV_8U(可能)的矩阵 ( ) 与CV_64F 使用convertTo合并以获取 tmp 作为 CV_64F

3)为什么你的Resultimagemats(目标垫)被初始化为cv::Scalar(2)?我认为您在滥用构造函数参数。请参阅此处了解更多信息。

4)您的image垫子是单通道垫子,并且您希望它作为 2 通道垫子(如问题中所述),将声明更改为

Mat image(tmp.rows,tmp.cols,CV_64FC2);
于 2011-11-30T13:08:06.720 回答