トップページ > コンテンツ > その他のAPI、ライブラリ関係 > Opencv関連 > 画像にpixel単位でアクセスする方法 > pixel単位で輝度値を取得する方法


取りたいポイントの座標を(x,y)のとき、        
unsigned char *pixel = (unsigned char*) (IplImageのバッファ名)->
imageData+ y*imagebuf->widthStep + x*imagebuf->nChannels;
もしくは
unsigned char *pixel = ((unsigned char*)(image->imageData + 
image->widthStep*y))[3*x+index]
もしくは
inline unsigned char getPixel(IplImage *image, int x, int y, int index)
{
   return (uchar)image->imageData[y*image->widthStep + x*image->nChannels + index];
}
といった関数を用意してしまうのも一つの手(引用:http://wikiwiki.jp/masayashi/?OpenCV%2F%A5%E9%A5%D9%A5%EA%A5%F3%A5%B0)。他にもcvGetという関数もある(参考:http://wiki.livedoor.jp/mikk_ni3_92/d/OpenCV::%A5%C7%A1%BC%A5%BF%A4%D8%A4%CE%B4%D6%C0%DC%A5%A2%A5%AF%A5%BB%A5%B9)

追記:
実際に試したところcvGet2Dと上のgetPixelの結果が異なってしまった。
どうやら、cvGet2Dがx,yではなく行,列であるため指定した所と縦横が逆になってしまったことに
起因するようだ。まぁいずれにしてもcvGet*Dは非推奨だし、getPixelの方使った方が無難かもしれん。
cvGetReal*Dとすると2値画像からの輝度値を取得する。
最終更新:2011年04月03日 18:50