Я хочу найти FT изображения и показать его величину и фазовый спектр в EmguCV.3.1.0.1.
Я пытался что-то вроде следующего:
public partial class Form1 : Form
{
const string path = @"lenagr.png";
Image<Bgr, float> image;
public Form1()
{
InitializeComponent();
image = new Image<Bgr, float>(path);
pictureBox1.Image = image.Bitmap;
}
private void button1_Click(object sender, EventArgs e)
{
Mat dft = new Mat(image.Size, DepthType.Default, 2);
CvInvoke.Dft(image, dft, DxtType.Forward, image.Rows);
Mat[] images = dft.Split();
//Show The Data
//Image<Bgr, float> im2 = dft.ToImage<Bgr, float>();
pictureBox2.Image = images[0].Bitmap;
}
}
Этот исходный код останавливает приложение.
Итак, каков абсолютно минимальный код для поиска преобразования Фурье изображения в EmguCV.3.1.0.1?
Примечание: Следующий исходный код даже не компилируется в EmguCV.3.1.0.1. И это выглядит много работы.
Image<Gray, float> image = new Image<Gray, float>(open.FileName);
IntPtr complexImage = CvInvoke.cvCreateImage(image.Size, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_32F, 2);
CvInvoke.cvSetZero(complexImage); // Initialize all elements to Zero
CvInvoke.cvSetImageCOI(complexImage, 1);
CvInvoke.cvCopy(image, complexImage, IntPtr.Zero);
CvInvoke.cvSetImageCOI(complexImage, 0);
Matrix<float> dft = new Matrix<float>(image.Rows, image.Cols, 2);
CvInvoke.cvDFT(complexImage, dft, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, 0);
//The Real part of the Fourier Transform
Matrix<float> outReal = new Matrix<float>(image.Size);
//The imaginary part of the Fourier Transform
Matrix<float> outIm = new Matrix<float>(image.Size);
CvInvoke.cvSplit(dft, outReal, outIm, IntPtr.Zero, IntPtr.Zero);
//Show The Data
CvInvoke.cvShowImage("Real", outReal);
CvInvoke.cvShowImage("Imaginary ", outIm);
Непонятно, что делает заявление, что делает. Кроме того, он смешивает IntPtr
, Image<T1, T2>
, Matrix<T>
и не использует Mat
.