色とは
色とはなんだ。
ゴリラの色覚は人間と同じだ。 http://web2.chubu-gu.ac.jp/web_labo/mikami/brain/25-2/index-25-2.html
色空間
RGB、HSV、Labとかhttp://ja.wikipedia.org/wiki/%E8%89%B2%E7%A9%BA%E9%96%93
OpenCVにおける色
チャンネルで表す。http://opencv.jp/cookbook/opencv_mat.htmlCV_8UC3というのは、3チャンネルのunsigned char(uchar)である。
読み込み
いま、カラーの画像を読み込む。
Mat image = imread("images\\gori.png", CV_LOAD_IMAGE_COLOR);
このときimageのデータ型はCV_8UC3となっている。
色空間はBGR(RGBでない)だ。
色空間はBGR(RGBでない)だ。
カラー画像であってもグレイスケールで読み込むこともできる。
Mat image = imread("images\\gori.png", CV_LOAD_IMAGE_GRAYSCALE);
imageのデータ型はCV_8UC1、つまりCV_8U(2つは同じ意味)となっている。
色はグレイスケールに変換される。
変換
Mat image = imread("images\\gori.png", CV_LOAD_IMAGE_COLOR); Mat grayImage; cvtColor(image, grayImage, CV_BGR2GRAY);
グレイスケールに変換され、grayImageはCV_8Uとなる。
ということでもちろんHSVに変換するなら
ということでもちろんHSVに変換するなら
Mat image = imread("images\\gori.png", CV_LOAD_IMAGE_COLOR); Mat hsvImage; cvtColor(image, hsvImage, CV_BGR2HSV);
HSV表色系に変換され、hsvImageはCV_8UC3となり、各チャンネルにはH、S、Vの値が格納される。
チャンネルの分離
チャンネルを分離したい時は複チャンネルMatに対してsplit()を用いる。
ここではあるHSV画像hsvImageを用いる。
ここではあるHSV画像hsvImageを用いる。
vector<Mat> planes; split(hsvImage, planes);
この処理で、planes[0]にH、planes[1]にS、planes[2]にVのMatが格納される。
それぞれのデータ型はCV8Uだ。
なお、この分離によってMatのチャンネルはコピーされている。
例でいうと、分離後のplanes[0]を編集してもhsvImageには影響しない、ということだ。
それぞれのデータ型はCV8Uだ。
なお、この分離によってMatのチャンネルはコピーされている。
例でいうと、分離後のplanes[0]を編集してもhsvImageには影響しない、ということだ。
チャンネルの統合
planesを各チャンネルにもつMatを生成する。
Mat hsvImage; merge(planes, hsvImage);
planesは同じデータ型、同じサイズのMat配列(vector)である。
ピクセル選択
CV_8UC3のatは
Vec3b hsv = hsvImage.at<Vec3b>(y, x);
とかく。
Vec3bとはOpenCVで定義される型で、uchar型3要素のベクターだ。
Vec3bとはOpenCVで定義される型で、uchar型3要素のベクターだ。
http://opencv.willowgarage.com/documentation/cpp/basic_structures.html#vechsv[0], hsv[1], hsv[2] にそれぞれH, S, Vの値(uchar型)が格納されている。
0 件のコメント:
コメントを投稿