2013-12-10 52 views
2

如何使用EMGU CV和C#計算圖像的描述符向量。使用EMGU CV中的HOGDescriptor獲取圖像的HOG描述符C#

,如果我做這樣的事情:

float[] f; 
Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(fullPath); 

f = hog.Compute(img1, Size.Empty, Size.Empty,null); 

這是行不通的,它提供了

Object reference not set to an instance of an object.

例外。我想用默認參數計算豬描述符。

有人知道如何做到這一點嗎?

Emgu cv記錄很差。

我已經修改了代碼,現在我收到以下錯誤:「外部組件引發一個異常」的代碼如下

public float[] GetVector(Image<Bgr, Byte> im) 
    { 
     HOGDescriptor hog = new HOGDescriptor(); // with defaults values 
     // Image<Bgr, Byte> pImage = new Image<Bgr, Byte>(; 
     //pImage.ROI = new Rectangle(new Point(0, 0), new Size(64, 128)); 
     Point[] p = new Point[im.Width * im.Height]; 
     int k = 0; 
     for (int i = 0; i < im.Width; i++) 
     { 
      for (int j = 0; j < im.Height; j++) 
      { 
       Point p1 = new Point(i, j); 
       p[k++] = p1; 
      } 
     } 
     return hog.Compute(im, new Size(8, 8), new Size(0, 0), p); 
    } 
+0

在哪條線上?調試你的代碼,看看'null'是什麼。 –

+0

f = hog.Compute(img1,Size.Empty,Size.Empty,null);在這一個;他們在功能文檔中說,如果你不需要計算位置,你可以讓它爲空。我不需要位置我想要計算所有圖像的豬描述符,而不僅僅是部分(某些位置) –

+1

只是爲了記錄 - 我已經看到一個類似於堆棧溢出的問題,但沒有人能夠解決它。 EMGU CV的記錄很差 –

回答

4

上市只是爲了這裏的記錄,他回答:

public Image<Bgr, Byte> Resize(Image<Bgr, Byte> im) 
     { 
      return im.Resize(64, 128, Emgu.CV.CvEnum.INTER.CV_INTER_LINEAR); 
     } 
     public float[] GetVector(Image<Bgr, Byte> im) 
     { 
      HOGDescriptor hog = new HOGDescriptor(); // with defaults values 
      Image<Bgr, Byte> imageOfInterest = Resize(im); 
      Point[] p = new Point[imageOfInterest.Width * imageOfInterest.Height]; 
      int k = 0; 
      for (int i = 0; i < imageOfInterest.Width; i++) 
      { 
       for (int j = 0; j < imageOfInterest.Height; j++) 
       { 
        Point p1 = new Point(i, j); 
        p[k++] = p1; 
       } 
      } 

      return hog.Compute(imageOfInterest, new Size(8, 8), new Size(0, 0), p); 
     } 

如果有人會需要它:)

+0

爲什麼Resize的寬度應該總是小於高度? –