2016-07-11 4 views
1

マトリクス型のOpenCV

template <typename T> 
T accumulate(cv::Mat mat){ 
    T acc=0; 
    for(int i=0;i<mat.cols();i++) 
     for(int j=0;j<mat.rows();j++) 
      acc += mat.at<T>(i,j); 
    return acc; 
} 

問題は、私はおよそData Typesを読んで、私はかなりだということですそれらを尊重するような機能を実装する(または呼び出す)方法が混乱しています。

つまり、matタイプがCV_32FCであるとします。 accumulate<float>(mat)で正しく電話するのは、accumulateユーザーの責任です。これは有名なエラーの原因です(スタックオーバフローは、人がatを呼び出している間に間違ったタイプを使用するため、質問で満ちています)。

これを回避してこのプロセスを自動化するにはどうすればよいですか?

+0

特定してください、それらの問題は、正確には何ですか? –

+0

私の更新された質問にお答えください – justHelloWorld

+0

これは有名なエラーの原因です。あなたができると思うことは、 'CV_ASSERT'チェックを追加して' T'型が実際に 'Mat'型のものであることを確認することです。これはopencvフォークがAPIクライアントに間違いを警告するためのものです。 –

答えて

0

Matクラス由来のOpenCVにはMat_<T>テンプレートがあります。 cv::Mat_<T> matを使用することができます。

次に、にaccumulate()と電話することができます。

OpenCVのMat_クラスリファレンスを参照してください。 http://docs.opencv.org/trunk/df/dfc/classcv_1_1Mat__.html#gsc.tab=0

関連する問題