作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 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();
最佳答案
您收到的消息是一个断言,它告诉您 DFT 函数仅采用具有一个或两个 channel (CV_32FC1、CV_32FC2、标志平均 channel 末尾的字母 C)的单精度浮点图像或具有一个或两个 channel 的 double 浮点图像两个 channel (CV_64FC1、CV_64FC2)。
双 channel 情况实际上是复杂图像在 OpenCV 数据存储中的表示。
如果您愿意,可以将图像拆分为 std::vector<cv::Mat>
其中每个元素确实代表一个 channel ,使用 cv::split
借助 cv::merge
在每个 channel 上应用 DFT 进行所需的处理并重新创建多 channel 图像.
关于c++ - OpenCV,DFT 函数不要在带有 IMREAD_COLOR 的图像中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52686879/
使用 IMREAD_COLOR 读取图像时,“dft”函数会引发错误: 使用 IMREAD_GRAYSCALE 读取图像时,DFT 函数工作得很好。但我想用 IMREAD_COLOR 阅读图像。 主功
我正在尝试读取未更改格式的图像,进行一些操作并将其转换回彩色格式 im = cv2.imread(fname,cv2.IMREAD_UNCHANGED) # shape(240,240,4) ....
我是一名优秀的程序员,十分优秀!