2016-04-26 10 views
1

OpenCVで5Dマトリックスの要素にアクセスする際に問題があります。OpenCV:5Dマトリックスの要素へのアクセス

for (UINT Y = 0; Y < height; ++Y) { 
    for (UINT X = 0; X < width; ++X) { 

     // a) Compute the homogeneous vector (wi,w) 
     Vec3b wi = image.at<Vec3b>(Y, X); 

     // b) Compute the downsampled coordinates 
     UINT y = round(Y/sigmaSpatial); 
     UINT x = round(X/sigmaSpatial); 
     Vec3b zeta = round((image.at<Vec3b>(Y, X) - min)/sigmaRange); 
         // round() here is overloaded for vectors 

     // c) Update the downsampled S×R space 
     int idx[5] = { y, x, zeta[0], zeta[1], zeta[2] }; 
     w_i_.at<Vec3b>(idx) = wi; 
    } 
} 

私はアサーションを取得していますマットによって生成されたエラーを失敗しました:私は= 3チャンネルはその後、私はループのために使用した行列要素にアクセスして変更しようとしている

int sizes[5] = { height_, width_, range_, range_, range_ }; 
Mat w_i_ = Mat(2 + channels, sizes, CV_16UC(channels), Scalar(0)); 

を使用して、私の行列が作成します:: at()私はコードを実行します。具体的に私が手にメッセージは次のとおりです。

OpenCV Error: Assertion failed (elemSize() == (((((DataType<_Tp>::type) & ((512 - 1) << 3)) >> 3) + 1) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> ((DataType<_Tp>::type) & ((1 << 3) - 1))*2) & 3))) in cv::Mat::at, file c:\opencv\build\include\opencv2\core\mat.inl.hpp, line 1003 

私は、Webを検索しましたが、私は(同様のトピックはありませんヘルプの証明)5D行列上の任意のトピックを見つけることができないようです。事前

答えて

0

おかげであなたはzeta変数を初期化し、その値をチェックしません。 zeta[0], zeta[1]zeta[2]インデックスの範囲外の値を得ている可能性があります。したがって、at()の内部範囲チェックに失敗します。

for(int i = 0 ; i < 3 ; i++) 
    if(zeta[i] < 0 || zeta[i] >= _range) 
     continue; 
+0

こんにちは、あなたのコメントをありがとう:少なくとも()で呼び出す前に、いくつかの手動範囲チェックを追加し、このようなクラッシュを防止するために

。アルゴリズムは、ゼータ値が常に範囲内にあるように実行されます。私も値を手動でチェックし、範囲内に入っています。エラーは、最初のループ(ゼータ値{10,7,5}、w_i_のサイズは{96,128,13,13,13})中に発生します –

関連する問題