9

私はopencvの初心者です。私はopencv v2.1を使用しています。RGB 画像を HSV 画像に変換しました。ここで、単一チャンネルの色相、値、彩度を個別に取得したいと考えています。私は何をすべきか?ここで同様の質問を見たことがありますが、誰もそれに答えませんでした。親切に助けてください。

4

3 に答える 3

14

1 番目のチャネルが H、2 番目のチャネルが S、3 番目のチャネルが V の RGB 画像にアクセスするのと同じ方法でアクセスできます。

OpenCV 2.1 を使用している場合は、IplImage を使用しているはずですよね? あなたのHSVイメージが IplImage *src.

IplImage* h = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* s = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* v = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
// Split image onto the color planes
cvSplit( src, h, s, v, NULL );

cvSplit関数は、マルチチャネル配列を複数の単一チャネルに分割します。私が間違っている場合は修正してください。OpenCV 2.4 を使用することをお勧めします。2D 配列のように非常に扱いやすい cvMat のような構造体があります。

編集:マットを使用している場合は、チャンネルを簡単に分離できます。あなたのhsvマットがMat img_hsv. それで :

vector<Mat> hsv_planes;
split( img_hsv, hsv_planes );
hsv_planes[0] // H channel
hsv_planes[1] // S channel
hsv_planes[2] // V channel

これで解決できるかどうかを確認してください。

于 2013-06-19T07:27:51.253 に答える