2014-02-15 51 views
0

我是新來openCV,我試圖在頻域中使用高斯濾波器來過濾圖像。但有一個運行時錯誤 「斷言失敗(類型== srcB.type()& & srcA.size()== srcB.size())在cv :: mulSpectrum」 我知道它是由返回我的過濾器的類型,類型不匹配,我不知道如何作出正確傅立葉變換高斯濾波器錯誤

這裏是過濾功能(我的猜測是這個函數的返回值是錯誤的):

cv::Mat createGaussianHighPassFilter(cv::Size size, double cutoffInPixels){ 

Mat ghpf(size, CV_64F); 

cv::Point center(size.width/2, size.height/2); 

for(int u = 0; u < ghpf.rows; u++) 
{ 
    for(int v = 0; v < ghpf.cols; v++) 
    { 
     ghpf.at<double>(u, v) = gaussianCoeff(u - center.x, v - center.y, cutoffInPixels); //kernel utk gaussian filter yg 128x128 
    } 
} 

return ghpf; 

}

這是主要功能:

Mat mask = createGaussianHighPassFilter(complexI.size(),16); 
shift(mask); 
Mat AX[] = {Mat::zeros(complexI.size(), CV_32F), Mat::zeros(complexI.size(), CV_32F)}; 
Mat kernel_spec; 
AX[0] = mask; // real 
AX[1] = mask; // imaginar 
    merge(AX, 2, kernel_spec); 

cout<<complexI.type()<<endl<<kernel_spec.type(); //the result is 13 and 14, the type doesn't match 

mulSpectrums(complexI, kernel_spec, complexI, DFT_ROWS); // only DFT_ROWS accepted 

updateMag(complexI);  // show spectrum 
updateResult(complexI);  // do inverse transform 

回答

1

當然他們不匹配。您正在初始化kernel_specCV_32,但complexICV_64。做一個Mat::convertTo()它應該工作。

HTH