スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

OpenCVで、基本とかBGR-> HSV変換

久々にOpenCVをいじって、忘却の彼方にいってしまっていたので、外部記録しておきます。

[とっても基本的なこと]
IplImage   --- 画像のポインタ
cvほにゃほにゃ       ---  ほにゃほにゃを行う関数。

[画像の読込み]
// BGRの順で読み込まれます。
IplImage* bgrimg = cvLoadImage("画像パス");
// ピクセルの値を取得。 Point(x,y) = (100,100)の場合
int x =100;
int y = 100;
int B = 0;
int G = 1;
int R = 2;
uchar p[3]
p[0] =  hsvimg->imageData[hsvimg->widthStep * y + x * 3 + B];
p[1] =  hsvimg->imageData[hsvimg->widthStep * y + x * 3 + G];
p[2] =  hsvimg->imageData[hsvimg->widthStep * y + x * 3 + R];

[BGR -> HSV変換 , HSV->BGR変換]
// BGRの順で読み込まれます。
IplImage* bgrimg = cvLoadImage("画像パス");

// HSVを格納するオブジェクトの作成
IplImage* hsvimg = cvCreateImage(cvGetSize(bgrimg),IPL_DEPTH_8U,3);

// BGR -> HSV 変換
cvCvtColor(bgrimg,hsvimg,CV_BGR2HSV);

// HSVの値を取得。 Point(x,y) = (100,100)の場合
int H = 0;
int S = 1;
int V = 2;
uchar p[3]
p[0] = hsvimg->imageData[hsvimg->widthStep * y + x * 3 + H];
p[1] = hsvimg->imageData[hsvimg->widthStep * y + x * 3 + S];
p[3] = hsvimg->imageData[hsvimg->widthStep * y + x * 3 + V];

// HSV -> BGR 変換
IplImage* bgrimg2 = cvCreateImage(cvGetSize(hsvimg),IPL_DEPTH_8U,3);
cvCvtColor(hsvimg,bgrimg2,CV_HSV2BGR);
ここで、値の範囲は、
 0 <= R , G , B <= 255
 0 <= H , S , V <= 255  
となります。
普通HSVは、
0 <= H <= 360
0 <= S <= 1.0
0 <= V <= 1.0
ですが、  OpenCVでは、値が以下のように変換されています。
本当のH = H  * 2
本当のS = double(S) / 255.0
本当のV = double(V) / 255.0
つまり、Hは、360°の半分として、S,Vは255レンジで出力されています。
これは、8bitに合わせる為です。

また、cvCvtColorは、第二引数により、色々変換できます。
以下の本に詳しく載っています。





終わり。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

プロフィール

ss_9

名前 :ss_9
紹介 :
20代はエンジニア、30代はプロ、40代は管理、50代は人脈。

Twitterボタン

最新記事
カテゴリ
AD
月別アーカイブ
RSSリンクの表示
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。