【发布时间】:2018-10-08 03:55:51
【问题描述】:
使用 IMREAD_COLOR 读取图像时,“dft”函数会引发错误:
在使用 IMREAD_GRAYSCALE 读取图像时,DFT 函数可以正常工作。但我想用 IMREAD_COLOR 读取图像。
主函数
const char* filename = "face.jpg";
Mat I = imread(filename, IMREAD_COLOR);
if(I.empty()) return 0;
Mat padded;
I.convertTo(padded, CV_32F);
Mat fft;
Mat planes[2];
dft(padded, fft, DFT_SCALE|DFT_COMPLEX_OUTPUT);
Mat fftBlur = fft.clone();
fftBlur *= 0.5;
split(fftBlur, planes);
Mat ph, mag;
mag.zeros(planes[0].rows, planes[0].cols, CV_32F);
ph.zeros(planes[0].rows, planes[0].cols, CV_32F);
cartToPolar(planes[0], planes[1], mag, ph);
merge(planes, 2, fftBlur);
//inverse
Mat invfft;
dft(fftBlur, invfft, DFT_INVERSE|DFT_REAL_OUTPUT);
Mat result;
invfft.convertTo(result, CV_8U);
Mat image;
cvtColor(result, image, COLOR_GRAY2RGB);
imshow("Output", result);
imshow("Image", image);
waitKey();
【问题讨论】:
-
"但我想用 IMREAD_COLOR 读取图像。" 为什么?
-
我改变图像的波形。转换回图片后
标签: c++ opencv image-processing dft