0

EmguCV を使用して画像のぼやけを検出しようとしています。現在、グレー イメージの FFT を実行しようとしていますが、 を呼び出した後にプログラムがハングするだけなので行き詰っていますCvInvoke.cvCopy。下記参照:

 _capturedFrames.ForEach(x =>
 {
    using(var gray = x.Convert<Gray, float>())
    {
       IntPtr complexImage = CvInvoke.cvCreateImage(gray.Size, IPL_DEPTH.IPL_DEPTH_32F, 2);

       CvInvoke.cvSetZero(complexImage);  // Initialize all elements to Zero
       CvInvoke.cvSetImageCOI(complexImage, 1);
       CvInvoke.cvCopy(gray.Ptr, complexImage, IntPtr.Zero);
       CvInvoke.cvSetImageCOI(complexImage, 0);

       var dft = new Matrix<float>(gray.Rows, gray.Cols, 2);
       CvInvoke.cvDFT(complexImage, dft, CV_DXT.CV_DXT_FORWARD, 0);

       double min;
       double max;
       Point minLoc;
       Point maxLoc;
       dft.MinMax(out min, out max, out minLoc, out maxLoc);

       if (max > overallMax)
       {
          overallMax = max;
          index = _capturedFrames.IndexOf(x);
       }

       CvInvoke.cvReleaseImage(ref complexImage);
    }
 });

上記のコードの目的は、メモリ内の画像のコレクションをループして、最も鮮明な画像のインデックスを見つけることです。上記の方法が機能していたとしましょう...これは、最も鮮明な画像を検出する堅牢な方法ですか? この目的でFFTは信頼できますか?

4

1 に答える 1

0

すべてを理解しました。以下の修正されたコードを参照してください。gray.NumberOfChannelsプロパティに注意してください。

_capturedFrames.ForEach(x =>
 {
    using(var gray = x.Convert<Gray, float>())
    {
       IntPtr complexImage = CvInvoke.cvCreateImage(gray.Size, IPL_DEPTH.IPL_DEPTH_32F, gray.NumberOfChannels);

       CvInvoke.cvSetZero(complexImage);  // Initialize all elements to Zero
       //CvInvoke.cvSetImageCOI(complexImage, 1);
       CvInvoke.cvCopy(gray.Ptr, complexImage, IntPtr.Zero);
       //CvInvoke.cvSetImageCOI(complexImage, 0);

       var dft = new Matrix<float>(gray.Rows, gray.Cols, gray.NumberOfChannels);
       CvInvoke.cvDFT(complexImage, dft, CV_DXT.CV_DXT_FORWARD, 0);

       double min;
       double max;
       Point minLoc;
       Point maxLoc;
       dft.MinMax(out min, out max, out minLoc, out maxLoc);

       if (max > overallMax)
       {
          overallMax = max;
          index = _capturedFrames.IndexOf(x);
       }

       CvInvoke.cvReleaseImage(ref complexImage);
    }
 });
于 2012-09-18T16:46:59.243 に答える