0

このコードを実行すると

      double a[]={1.0,2.0,3.0,4.0};
      CvMat M=cvMat(8,8,CV_8UC1, a);
      cout<<"M.data.ptr="<< M.data.ptr[0]<<endl;

行列の最初の要素である 1.0 にアクセスするには、M.data.ptr=^@ 奇妙に出力が得られます。cout 出力をこれにコピーしようとしましたか? そして、^@コピーしません..私は貼り付けたときにのみ取得しました...とM.data.ptrのような他のバリエーションを結びましたが、これら2つのそれぞれに対して通常のエラーとnull出力が得られました。データ構造体メンバーを逆参照し、関数 i/e cvGet2D を使用せずに 1.0 にアクセスする方法は?M.data.ptr[0]M.data.ptr

4

2 に答える 2

1

タイプ の要素で行列を初期化しようとしていますが、タイプ のdouble行列を作成していCV_8UC1ます。unsigned charまた、ポインターに直接アクセスすると、基になるデータへの生のポインター (型) が返されます。double*実際の値を取得するには、そのポインターを解釈する必要があります。あなたがやろうとしていることは、実際には次のようになります。

double a[]={1.0,2.0,3.0,4.0};
CvMat M = cvMat(8,8,CV_64FC1, a);

double* data_ptr_64f = (double*)(M.data.ptr);

cout<<"M.data.ptr="<< data_ptr_64f[0]<<endl;
于 2013-10-11T15:16:28.047 に答える