と言うことで画素へのアクセスについて。
基本読み込んだ画像がどんな形式であるかが、問題になってくる。
OpenCVでは8bit,16bit,32bit,(一応)64bitに対応している。
その対応によってIPL_DEPTH_XXXとなるわけです。
8U,8S,16Uやらです。
32はRGB,8は濃淡である。で64は一応アルファレンダリング(透明度)にまで対応してくる。
16は・・・医療画像とかかな?(医療画像はたいてい2bit/pixelで表示される。)
でこのOpenCV非常に多くのアルゴリズム、お手軽に実装できる表示機能などあるが、16bitにはほとんど対応していません。と言うわけでもし16bitを対象に処理するなら、16bitから8bitに変換し、処理した後8bitから16bitに変更しなければならない。
まぁ以上は前置きなわけですが、その後の画素へのアクセスの仕方をまとめておきたいと思います。
(x,y)の画素値を取得したい場合
IplImage *image = cvLoadImage("test.png");
unsigned char b = static_cast< unsiged char> (image->imageData[(y * image->widthStep + x)
* image->nChannel]);
unsigned char g = static_cast< unsiged char>(image->imageData[(y * image->widthStep + x +)
* image->nChannel + 1]);
unsigned char r = static_cast< unsiged char> (image->imageData[(y * image->widthStep + x)
* image->nChannel + 2]);
である。jpg画像なんで基本3チャンネルRGBを対象としている。リトルエンディアン方式なんで注意
7/3修正しました。
0 件のコメント:
コメントを投稿