我需要找到一些通用的C++库,它采用反fft输出(fftw_complex格式,即两倍),并将这些数据转换为图像文件,如png。我可以用dffts来获取2d数据(使用10log 10(re_re+im_im)来获得每个频率分量的幅值),但我不知道哪个图像库可以工作。
我曾经使用过一个名为zimage的旧程序,但它似乎不再可用了。我没有MATLAB在我的Ubuntu9.10系统(但我有八度)
八度可以生成瀑布图像吗?我也需要把声谱图转换成wav声音文件。
有什么主意吗?
发布于 2010-09-16 07:15:27
最容易创建的图像格式是PNM。您可以将其打印为文本文件,然后使用大多数图形程序进行转换。下面是维基百科页面中的一个例子:
P2 24 7 15
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0
0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0
0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0将该文本保存在一个名为"feep.pgm“的文件中,您将看到我的意思。
格式化
您必须将您的10log 10信息缩放到像素值。
发布于 2010-11-24 02:52:23
OpenCV是一个库,它可以处理PNG文件以及各种其他格式。它应该可以在您的Ubuntu9.10系统上使用apt get libcv-dev (从内存中,您可能需要再次检查包名)。
/*
* compile with:
*
* g++ -Wall -ggdb -I. -I/usr/include/opencv -L /usr/lib -lm -lcv -lhighgui -lcvaux filename.cpp -o filename.out
*/
#include <cv.h>
#include <highgui.h>
/*
* Your image dimensions.
*/
int width;
int height;
CvSize size = cvSize(width, height);
/*
* Create 3-channel image, unsigned 8-bit per channel.
*/
IplImage *image = cvCreateImage(size, IPL_DEPTH_8U, 3);
for (int i = 0; i < width; ++i)
for (int j = 0; j < height; ++j)
{
unsigned int r;
unsigned int g;
unsigned int b;
/*
* Keep in mind that OpenCV stores things in BGR order.
*/
CvScalar bgr = cvScalar(b, g, r);
cvSet2D(image, i, j, bgr);
}
cvSaveImage("filename.png", image);
cvReleaseImage(&image);https://stackoverflow.com/questions/3338001
复制相似问题