我试图制作一个单一通道图像的dft,并且由于cvDft期望复杂的值,我被建议将原始图像与另一个图像合并为全0,因此最后一个图像将被视为虚部。< / p>
使用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
有人可以帮助我吗?谢谢!
答案 0 :(得分:1)
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
&amp; image
席位(目标席位)初始化为cv::Scalar(2)
?我认为你滥用了约束参数。有关详细信息,请参阅here。
4)你image
mat是单通道垫,你想要它作为2通道垫(如问题中所述),将声明更改为
Mat image(tmp.rows,tmp.cols,CV_64FC2);