我使用cv :: merge时出错

时间:2016-11-22 07:30:49

标签: c++ opencv opencv3.0

使用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的初学者,很困惑。 有谁可以帮助我?

2 个答案:

答案 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)

来自OpenCV 3.0 documentation

  

函数合并合并多个数组以构成单个多通道数组。

您的目标矩阵dftready创建为单通道矩阵(CV_32F),而不是带有CV_32FC2的双通道矩阵。