使用cv::merge()
语句合并两个图像时出现以下错误:
OpenCV错误:合并中的断言失败(mv [i] .size == mv [0] .size&& mv [i] .depth()== depth),file / home / yasin / ProgramFile / opencv-3.0.0 / modules / core / src / convert.cpp,第950行 在抛出'cv :: Exception'的实例后终止调用 what():/ home / yasin / ProgramFile / opencv-3.0.0 / modules / core / src / transfer.cpp:950:error:( - 1515)mv [i] .size == mv [0] .size& ;&安培; mv [i] .depth()==功能合并中的深度
我试图通过搜索和使用一些方法解决这个问题,但我的努力没用。
我的方法是:
void TakeDFT(cv::Mat&source,cv::Mat&DFTofSource){
cv::Mat OriginalFloat;
OriginalFloat.convertTo(source,CV_32FC1,1.0/255.0);
cv::Mat OriginalComplex[2] = {
OriginalFloat,cv::Mat::zeros(OriginalFloat.size(),CV_32F)
};
cv::Mat dftready;
dftready.convertTo(dftready,CV_32F);
cv::merge(OriginalComplex,2,dftready);
cv::dft(dftready,DFTofSource,cv::DFT_COMPLEX_OUTPUT);
}
和
void TakeDFT(cv::Mat&source,cv::Mat&DFTofSource){
cv::Mat OriginalFloat;
OriginalFloat.convertTo(source,CV_32FC1,1.0/255.0);
cv::Mat OriginalComplex[2] = {
OriginalFloat,cv::Mat::zeros(OriginalFloat.size(),CV_32F)
};
cv::Mat dftready;
dftready.convertTo(dftready,CV_32F);
std::vector<cv::Mat>array_to_merge;
array_to_merge.push_back(OriginalComplex[0]);
array_to_merge.push_back(OriginalComplex[1]);
cv::merge(array_to_merge,dftready);
cv::dft(dftready,DFTofSource,cv::DFT_COMPLEX_OUTPUT);
}
我是opencv的初学者,很困惑。 有谁可以帮助我?
答案 0 :(得分:1)
您只是声明OriginalFloat(未定义它),然后您尝试转换它(虽然它是一个空矩阵)。
我认为你想要做的是
source.convertTo(OriginalFloat, CV_32FC1, 1.0/255.0);
dftready会遇到同样的问题。您需要做的是通过创建矩阵来定义其类型:cv::Mat dftready = cv::Mat dftready(source.size(), CV_32F);
,或者只是声明它cv::Mat dftready;
并让cv::merge
函数使用正确的类型创建它。
答案 1 :(得分:0)
函数合并合并多个数组以构成单个多通道数组。
您的目标矩阵dftready
创建为单通道矩阵(CV_32F
),而不是带有CV_32FC2
的双通道矩阵。