我使用 cv::merge 时出错
error when i using cv::merge
我在使用 cv::merge()
语句合并两个图像时遇到以下错误:
OpenCV Error: Assertion failed (mv[i].size == mv[0].size && mv[i].depth() == depth) in merge, file /home/yasin/ProgramFile/opencv-3.0.0/modules/core/src/convert.cpp, line 950
terminate called after throwing an instance of 'cv::Exception'
what(): /home/yasin/ProgramFile/opencv-3.0.0/modules/core/src/convert.cpp:950: error: (-215) mv[i].size == mv[0].size && mv[i].depth() == depth in function merge
我试图通过搜索和使用一些方法来解决这个问题,但我的努力没有用。
我的方法是:
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 的初学者并且很困惑。
谁能帮帮我?
您只是声明了 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
函数使用正确的类型创建它。
The functions merge merge several arrays to make a single multi-channel array.
您的目标矩阵 dftready
创建为单通道矩阵 (CV_32F
),而不是 CV_32FC2
的双通道矩阵。
我在使用 cv::merge()
语句合并两个图像时遇到以下错误:
OpenCV Error: Assertion failed (mv[i].size == mv[0].size && mv[i].depth() == depth) in merge, file /home/yasin/ProgramFile/opencv-3.0.0/modules/core/src/convert.cpp, line 950 terminate called after throwing an instance of 'cv::Exception' what(): /home/yasin/ProgramFile/opencv-3.0.0/modules/core/src/convert.cpp:950: error: (-215) mv[i].size == mv[0].size && mv[i].depth() == depth in function merge
我试图通过搜索和使用一些方法来解决这个问题,但我的努力没有用。
我的方法是:
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 的初学者并且很困惑。 谁能帮帮我?
您只是声明了 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
函数使用正确的类型创建它。
The functions merge merge several arrays to make a single multi-channel array.
您的目标矩阵 dftready
创建为单通道矩阵 (CV_32F
),而不是 CV_32FC2
的双通道矩阵。