none
OpenCV的IntPtr如何使用 RRS feed

  • 問題

  • 在C#配合OpenCV(EmguCV)中

    我們利用OpenCV理面的CvInvoke方法

    例如下面這個方法

     

     

    CvInvoke.cvDCT(IntPtr src, IntPtr dst, CV_DCT_TYPE flags);
    
    

     


    可以看出來src是來源影像,dst是目標影像,最後是參數設定

    但我的疑問是 IntPtr這個格式,我要如何放一張影像給IntPrtr?

    因為C#中我最常用的是Image這個格式

    或是Emgu中的Image<,>格式

    所以想請問有沒有可以將ImageImage<,> 或是陣列 轉成IntPtr格式的例子?

    感謝!!

    2010年12月2日 上午 06:04

解答

  • 您好

    關於 EmguCV 問題,建議到他的討論區看看 http://www.emgu.com/forum/index.php

    裡面有蠻多前人的發問可以看,像是 http://www.emgu.com/forum/viewtopic.php?f=7&t=911&start=0 裡面的程式碼

       Image<Gray, float> matA = new Image<Gray, float>("stuff.jpg");

             //The matrix to be convoled with matA, a bluring filter
             Matrix<float> matB = new Matrix<float>(
                new float[,] {
                {1.0f/16.0f, 1.0f/16.0f, 1.0f/16.0f},
                {1.0f/16.0f, 8.0f/16.0f, 1.0f/16.0f},
                {1.0f/16.0f, 1.0f/16.0f, 1.0f/16.0f}});

             Image<Gray, float> convolvedImage = new Image<Gray, float>(matA.Size + matB.Size - new Size(1, 1));

             Matrix<float> dftA = new Matrix<float>(
                CvInvoke.cvGetOptimalDFTSize(convolvedImage.Rows),
                CvInvoke.cvGetOptimalDFTSize(convolvedImage.Cols));
             matA.CopyTo(dftA.GetSubRect(matA.ROI));

             CvInvoke.cvDFT(dftA, dftA, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, matA.Rows);

             Matrix<float> dftB = new Matrix<float>(dftA.Size);
             matB.CopyTo(dftB.GetSubRect(new Rectangle(Point.Empty, matB.Size)));
             CvInvoke.cvDFT(dftB, dftB, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, matB.Rows);

             CvInvoke.cvMulSpectrums(dftA, dftB, dftA, Emgu.CV.CvEnum.MUL_SPECTRUMS_TYPE.DEFAULT);
             CvInvoke.cvDFT(dftA, dftA, Emgu.CV.CvEnum.CV_DXT.CV_DXT_INVERSE, convolvedImage.Rows);
             dftA.GetSubRect(new Rectangle(Point.Empty, convolvedImage.Size)).CopyTo(convolvedImage);


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月2日 上午 06:45
    版主

所有回覆

  • 您好

    關於 EmguCV 問題,建議到他的討論區看看 http://www.emgu.com/forum/index.php

    裡面有蠻多前人的發問可以看,像是 http://www.emgu.com/forum/viewtopic.php?f=7&t=911&start=0 裡面的程式碼

       Image<Gray, float> matA = new Image<Gray, float>("stuff.jpg");

             //The matrix to be convoled with matA, a bluring filter
             Matrix<float> matB = new Matrix<float>(
                new float[,] {
                {1.0f/16.0f, 1.0f/16.0f, 1.0f/16.0f},
                {1.0f/16.0f, 8.0f/16.0f, 1.0f/16.0f},
                {1.0f/16.0f, 1.0f/16.0f, 1.0f/16.0f}});

             Image<Gray, float> convolvedImage = new Image<Gray, float>(matA.Size + matB.Size - new Size(1, 1));

             Matrix<float> dftA = new Matrix<float>(
                CvInvoke.cvGetOptimalDFTSize(convolvedImage.Rows),
                CvInvoke.cvGetOptimalDFTSize(convolvedImage.Cols));
             matA.CopyTo(dftA.GetSubRect(matA.ROI));

             CvInvoke.cvDFT(dftA, dftA, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, matA.Rows);

             Matrix<float> dftB = new Matrix<float>(dftA.Size);
             matB.CopyTo(dftB.GetSubRect(new Rectangle(Point.Empty, matB.Size)));
             CvInvoke.cvDFT(dftB, dftB, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, matB.Rows);

             CvInvoke.cvMulSpectrums(dftA, dftB, dftA, Emgu.CV.CvEnum.MUL_SPECTRUMS_TYPE.DEFAULT);
             CvInvoke.cvDFT(dftA, dftA, Emgu.CV.CvEnum.CV_DXT.CV_DXT_INVERSE, convolvedImage.Rows);
             dftA.GetSubRect(new Rectangle(Point.Empty, convolvedImage.Size)).CopyTo(convolvedImage);


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月2日 上午 06:45
    版主
  • 利用System.Drawing.Image.GetHowFromImage就可以得到一個intptr
    夢想無限
    2010年12月2日 上午 06:49
  • 利用System.Drawing.Image. GetHowFromImage就可以得到一個intptr
    夢想無限
    您好,我在System.Drawing.Image中,並沒有找到 GetHowFromImage這個方法
    2010年12月2日 上午 07:21
  • 您好

    關於 EmguCV 問題,建議到他的討論區看看 http://www.emgu.com/forum/index.php

    裡面有蠻多前人的發問可以看,像是 http://www.emgu.com/forum/viewtopic.php?f=7&t=911&start=0  裡面的程式碼

       Image<Gray, float> matA = new Image<Gray, float>("stuff.jpg");

             //The matrix to be convoled with matA, a bluring filter
             Matrix<float> matB = new Matrix<float>(
                new float[,] {
                {1.0f/16.0f, 1.0f/16.0f, 1.0f/16.0f},
                {1.0f/16.0f, 8.0f/16.0f, 1.0f/16.0f},
                {1.0f/16.0f, 1.0f/16.0f, 1.0f/16.0f}});

             Image<Gray, float> convolvedImage = new Image<Gray, float>(matA.Size + matB.Size - new Size(1, 1));

             Matrix<float> dftA = new Matrix<float>(
                CvInvoke.cvGetOptimalDFTSize(convolvedImage.Rows),
                CvInvoke.cvGetOptimalDFTSize(convolvedImage.Cols));
             matA.CopyTo(dftA.GetSubRect(matA.ROI));

             CvInvoke.cvDFT(dftA, dftA, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, matA.Rows);

             Matrix<float> dftB = new Matrix<float>(dftA.Size);
             matB.CopyTo(dftB.GetSubRect(new Rectangle(Point.Empty, matB.Size)));
             CvInvoke.cvDFT(dftB, dftB, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, matB.Rows);

             CvInvoke.cvMulSpectrums(dftA, dftB, dftA, Emgu.CV.CvEnum.MUL_SPECTRUMS_TYPE.DEFAULT);
             CvInvoke.cvDFT(dftA, dftA, Emgu.CV.CvEnum.CV_DXT.CV_DXT_INVERSE, convolvedImage.Rows);
             dftA.GetSubRect(new Rectangle(Point.Empty, convolvedImage.Size)).CopyTo(convolvedImage);


    歡迎參觀我的Blog.NET菜鳥自救會
    您好,感謝您的幫助,如果不是您的提醒,我還不知道有這個論壇,我會在研究看看,感恩!
    2010年12月2日 上午 07:22