我正在尝试制作一个单 channel 图像的 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
任何人都可以帮助我吗?谢谢!
最佳答案
1)看起来你混合了2种不同风格的opencv代码cv::Mat
(-Mat) 是来自新版opencv的c++类,cvMerge
是老版本opencv的一个c函数。
而不是使用 cvmerge
使用 merge
2)您正在尝试合并 tmp
类型的矩阵( CV_8U
) (可能)带有 CV_64F
使用 convertTo将 tmp 设为 CV_64F
3) 为什么你的Result
& image
垫子(目标垫子)初始化为 cv::Scalar(2)
?我认为您在滥用构造函数参数。见 here了解更多信息。
4) 你是 image
mat 是单 channel 垫,您希望它作为 2 channel 垫(如问题中所述),将声明更改为
Mat image(tmp.rows,tmp.cols,CV_64FC2);
关于opencv - 无法使用 cvMerge、DFT 进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8325689/