1

OpenCV と C++ を使用して、水平 1D ベクトルの形式でフィルターを設計しました。ベクトルは float データで構成されます。グレースケール イメージの元の uchar データに、この float ベクトルを 1 次元ウィンドウとして乗算して結果を取得します。ただし、適切な結果が得られません。

ベクター要素に画像のピクセル値を掛けると、0 ~ 255 の範囲を超えてしまい、これが問題を引き起こしていると思います。

適切な結果を得るために、この float データを uchar に型キャストする方法はありますか?

今使ってImg.at<uchar> = (uchar)(floatVector)ます。

ありがとう

4

2 に答える 2

1

乗算した後にキャストを入力することをお勧めします...したがって、uchar画像マトリックスをCV_32FC1(グレースケール画像と言うので、チャネル= 1と言うので)に変換します...フィルターで画像の畳み込みを行い、値をキャストしますをuchar表示するために..

于 2013-01-13T15:40:56.087 に答える
0

float 型で乗算を実行し、最後にのみ unsigned char に変換したい。float ベクトルを正規化することも忘れないでください (すべての値の合計は 1 になります)。

だから基本的にあなたが望む

Data.at(座標) = (unsigned char) (floatVector(0)*(Data.at(coord0) + ... + FloatVector(last)*Data.at(coordLast))

于 2013-01-13T18:57:43.713 に答える