コードに次の式が
あります。*h = ((*R) / ((*G) + (*R)));
ここで、R、G、および B はuchar
、答えを Mat ポインターに変換したい除算があるための Mat ポインターです。float
だから私はこれを試しました
*h = Mat_<float>((*R) / ((*G) + (*R)));
しかし、セグメンテーション違反が発生します。
どうすればいいですか?
行列 *R を float に変換する必要があります。メソッドを使用しますMat::convert_to
。R8 が uchar の行列であると仮定すると、次のように float 行列を作成できます。
Mat R32; R8.convertTo(R32,CV_32F);
これは、OpenCVの紹介でうまく説明されています。
注 1: この式*h = Mat_<float>((*R) / ((*G) + (*R)))
は、uchars を使用して除算を実行し、後で結果を float として再解釈しますが、これは誤りです。Mat_<float>
すでに浮動小数点数である配列の要素アクセスを単純化するだけです。
注 2: ほとんどの場合、Mat へのポインターを使用する必要はありません。