0
我正在使用emgu cv上的傅里葉變換做一個小實驗。我的目標是對圖像進行傅立葉變換,然後再進行逆傅里葉變換,並檢查圖像是否顯示。數學上,它應該。EMGU CV C傅里葉變換#
這是我的代碼,我相信這是正確的
Image<Gray, float> image = new Image<Gray, float>("c://box1.png");
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);
Matrix<float> idft = new Matrix<float>(dft.Rows, dft.Cols, 2);
CvInvoke.cvDFT(dft, idft, Emgu.CV.CvEnum.CV_DXT.CV_DXT_INVERSE, 0);
IntPtr complexImage2 = CvInvoke.cvCreateImage(idft.Size, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 2);
CvInvoke.cvShowImage("picture", idft);
System.Threading.Thread.Sleep(99999); // to wait and see the picture
我有兩個問題:
1-錯誤:錯誤顯示出來說:「OpenCV的:源圖像必須有1,3或4渠道「我相信它與IDFT相關,但我不能解決它
2-它仍然顯示輸出圖像,但不幸的是,它不是輸入的原始圖像。所有顯示的都是純灰色的圖像。
謝謝。
代碼缺少轉換函數的括號。它應該是: CvInvoke.cvDFT(DFT.Convert()。Ptr,original.Ptr,Emgu.CV.CvEnum.CV_DXT.CV_DXT_INVERSE,-1); –
2014-02-04 01:28:32