1

私はちょうど奇妙な問題に遭遇しました。クラスのヘッダーで、次のcv::Matように複数定義しました:
cv::Mat drawing, img_grad, img_bright, img_cov; (ver1)
cv::Mat drawing, img_grad, img_bright, img_cov, img_notused;(ver2)

コードでは、img_cov を次のように定義します。
img_cov = Mat::zeros( somemat.size(), CV_32FC(6) )
奇妙なことに、複数の Mat のヘッダー宣言 (上記の ver2 を参照) に別の Mat を追加すると、img_notusedそれが使用されていなくても、他の Mat にアクセスできなくなります。 my than 0 のチャンネル。img_covたとえば経由でアクセスimg_cov.at<float>( j, i, 1)すると、クラッシュにつながります。

マーモイ割り当てのようです。誰かが私にこれを説明できますか?

4

1 に答える 1

3

イメージの値にアクセスするために間違ったコマンドを使用しています (以前にクラッシュしたはずです。リリース モードでコンパイルしている可能性があります...)。

行は次のようになります。

typedef Vec<6,float> Vec6f;
Vec6f pixel = img_cov.at<Vec6f>(i,j); 
float value_you_look_for = pixel[1]; // note that 1 means the second channel of 6.

CV_32FC(6)は、チャネルに値を持つ 6 チャネルの行列を意味するためfloatです。

参考までに:特定のドキュメントへのリンク

于 2012-12-02T14:53:30.420 に答える