傅里叶变换高斯滤波器误差
fourier transform gaussian filter error
我是openCV的新手,我正在尝试使用频域中的高斯滤波器过滤图像。但是存在运行时错误"assertion failed (type == srcB.type() && srcA.size() == srcB.size()) in 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
当然,
它们不匹配。您正在将kernel_spec
初始化为 CV_32
但complexI
CV_64
。做一个Mat::convertTo()
,它应该可以工作。
呵
相关文章:
- 为什么在浮点中从大到小会引入更多的误差
- C++ OpenCV 卡尔曼滤波器构造函数错误
- 基于相邻元素 c++ 的分段误差范围的循环
- QImage::p ixel 和 QImage::setPixel 坐标超出范围误差
- OpenCV的卡尔曼滤波器过渡矩阵如何处理时间(如t和t^2)进行运动预测?
- 将误差线添加到 VTK 二维散点图
- 如何使用中值滤波器算法去除胡椒噪声
- 动态矩阵特征分解过程中的误差
- 转换为非标量误差是什么意思?我该如何解决?
- 用于检测特定频率的直接显示滤波器
- 特征误差:INVALID_MATRIX_PRODUCT乘向量和矩阵
- 使用不同参数匹配器的同一方法ON_CALL AND EXPECT_CALL会产生饱和和活动误差
- boost odeint 中的受控误差步进器是否支持复杂的数据类型?
- 此外,在计算大斐波那契数时存在精度误差
- Opencv 平均滤波器提供的输出与 Matlab 平均滤波器不同
- C++17中不定参数函数的误差
- 多态性中独立类的基本误差.C++
- 犰狳函数的不同最小二乘误差
- 在 qt 中的绘图中拖动误差线
- 傅里叶变换高斯滤波器误差