アプリ版:「スタンプのみでお礼する」機能のリリースについて

グレースケール時の画素値の順番について

今VC++でOpenCVを使ってプログラムを作っています。

白黒のシルエット写真(.bmp)をcvLoadImageでグレースケール画像の8bit1チャンネルとして読み込んでいます。
↓↓
IplImage* p = cvLoadImage(filename, CV_LOAD_IMAGE_GRAYSCALE);


このpのピクセルごとの画素値を手に入れたいのですが、
IplImageではグレースケール時にはどのような並びで入っているのでしょうか?
3チャンネルならBGRの順で格納されているのはわかるんですが、
1チャンネルの時はそのままポインタがずれれば、次のピクセルという風にシンプルになっているのでしょうか?

今のところポインタを1つずらしたところを隣のピクセルという風に処理をしているんですが、
取り出した値を見ても負の値が出てきているので、たぶん間違いなのでしょう。

どなたか知恵をお貸しください。

A 回答 (3件)

CV_LOAD_IMAGE_GRAYSCALEで読みこんだのなら、1 チャンネルのデータになっているはずです。



http://opencv.jp/opencv-2svn/c/basic_structures. …
念のため、 p->nChannels の値を確認してください。1になっているはずです。



> 今のところポインタを1つずらしたところを隣のピクセルという風に処理をしているんですが、
> 取り出した値を見ても負の値が出てきているので、たぶん間違いなのでしょう。

IplImage.imageData は char *型(つまり、符号付きchar型)なので、 128~255は -128~-1になります。
unsigned char dc = p->imageData[ y * p->widthStep + x] ;
int dsi = 0xff & (p->imageData[ y * p->widthStep + x] ) ;
など、符号無し型やより大きい型の下位ビットにするようにする必要があります。
    • good
    • 0

どこまでご存知なのかわからないので回答しにくいです


リファレンスやサンプルコードが豊富にある
http://opencv.jp/sample/basic_structures.html#ac …
はご存知でしょうか

グレースケールの場合 R=G=B ということはご存知ですよね
    • good
    • 0

その画像、白黒なんだけど 値としてはRGBってオチは 無いよね?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!