2014-01-29 64 views
-1

我想要得到他們的Itime等於1000的5幀的平均值。我的代碼中有什麼問題?爲什麼我在返回部分出錯?一些幀的平均值/使用C++和opencv獲取錯誤

float Data::HighestTime(float *distances){ 
     Mat mean_distances; 
     if(Itime=1000){ 
      for(int i=0; i<5; i++){ 
       cv::Mat matDistances = Mat(width, height, CV_32FC1, distances); 
       Mat mean_distances = matDistances; 
       mean_distances = mean_distances * (1/5); 

      } 
     } 
     return mean_distances; 
    } 

版後:

cv::Mat Data::HighestTime(float *distances){ 
     Mat mean_distances; 
     if(Itime=1000){ 
      for(int i=0; i<5; i++){ 
       cv::Mat matDistances = Mat(width, height, CV_32FC1, distances); 
       Mat mean_distances = matDistances; 
       mean_distances = mean_distances * (1/5); 

      } 
     } 
     return mean_distances; 
    } 

我得到了一個新的錯誤:

假設我有這樣的功能:

cv::Mat Data::HighestTime(float* distances){ 
    Mat mean_distances; 
    return mean_distances; 
} 

我想在此使用它的返回值功能:

void Data::Filter(){ 
    HighestTime(float* distances); 
    medianBlur(mean_distances, mean_distances, ksize); 
} 

它抱怨mean_distances沒有定義!我應該將其定義爲該函數的參數嗎?

回答

0

您的函數確實返回類型爲float的值。你得到一個編譯器錯誤,因爲你實際返回的是mean_distances,它的類型是cv::Mat。只需將方法的簽名更改爲Mat Data::HighestTime(float *distances)即可擺脫該錯誤。


編輯:

關於你的第二個錯誤。您實際上必須通過您的電話將價值回報保存到HighestTime。你的第二個功能應該是這樣的:

void Data::Filter(){ 
    Mat mean_distances = HighestTime(float* distances); 
    medianBlur(mean_distances, mean_distances, ksize); 
} 
+0

我改變了d它到cv :: Mat。現在它可以工作,但我得到了一個新的錯誤 –

+0

當你遇到錯誤,並且你想要一個解決方案時,最好也發佈你在最初的問題中得到的錯誤。 –

+0

@a_a因爲看起來你是初學者,所以你應該花一些時間研究編程的基礎知識,以避免你正在生產的所有這些簡單的錯誤。這不是讓他人編寫代碼的平臺! –

0

有幾件事情需要考慮。

Itime==1000,因爲你不希望分配1000 ITIME

此外,有什麼float *distances?我認爲它是一個指向數組的指針,因此,您必須增加指針並將其解除引用*(distances + i)

如您所願計算平均值,您必須計算平均值,並且這樣做是這樣完成的:

  1. 總結一下所有的值:meanDistances += matDistances;
  2. 鴻溝總和值的數目:meanDistances /= 5.0f(這裏,需要5.0,因爲你不希望有integerdivison像(1/5),它類似於0 )
+0

我需要使用矢量來存儲每一幀嗎? –

+0

@aa我不明白你的問題 – m47h