画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
翻訳(Translate)

プロフィール

Akira

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

07 | 2010/08 | 09
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

色相、彩度、明度の計算方法

メインページ画像処理

色相(Hue:色合い)、彩度(Saturation:鮮やかさ)、明度(Brightness,Lightness,Intensity,Value:明るさ)については、以前、変換式には色相、彩度、明度ほかのページにまとめたのですが、実は訳も分からず公式だけをまとめていました。

で、なんだか気持ちが悪かったので色相彩度明度について、よ~く調べてみました。
私なりの理解ですが、以下にまとめました。

R、G、Bの色空間については、下図のようにRGBをXYZのように三次元座標で表すと、一辺の長さが255で表される立方体の範囲内で全ての色を表す事が出来ます。(R,G,B各8bitの場合)
色相、彩度、明度

この立方体を白(255、255、255)に位置から黒(0、0、0)の方向へ見て、R軸を右側に取ると、

色相、彩度、明度の計算方法

のように、正六角形となります。
この時、の方向を0°として、反時計回りにの位置が120°240°色相0~360°(2π)を定めます。
彩度は一番外側の六角形に対して、どの割合の位置に配されているかを0~1.0で表したものが彩度となります。

詳細は後述しますが、色相彩度はカメラやパソコンなどの性能評価(使いやすさ、価格、処理速度など)を表す時に用いるレーダーチャート(クモの巣グラフ)もどきみたいな物?!と思うと、自分の中で少し整理ができました。

さらに、この六角形の高さ方法に明度を割り振ると、HSV(六角錐モデル)HLS(双六角錐モデル)となります。
それぞれの違いは明度の定義が異なり、R、G、Bの最大輝度値をImax、最小輝度値をIminとしたときに

  明度V = Imax

としたものがHSV

  明度L = ( ImaxImin ) / 2

としたものがHLSとなり、明度の値は0~1.0で表されます。

これを立体で表すと

HSV(六角錐モデル)
色相、彩度、明度の計算方法
HLS(双六角錐モデル)
色相、彩度、明度の計算方法

となります。
このHSV、HLSともに、六角錐の斜面の部分が彩度が1.0となります。

以下、色相彩度明度の詳細な計算方法です。

HSVの計算方法

はじめにR、G、Bの輝度値の範囲を0~255から0~1.0となるように変換します。
(R、G、Bのそれぞれの値を255で割ります。)

【色相Hの求め方】
下図のように、0°方向R120°方向G240°方向Bだけ進み、最後の点の位置のR軸に対する角度が色相となります。
色相、彩度、明度の計算方法

この最後の点の座標は中心を(x、y) = (0、0) とすると、R、G、Bの方向のなす角度から
色相、彩度、明度の計算方法

となり、より色相Hが求まります。
色相、彩度、明度の計算方法

ただし、アークタンジェントの計算が出来ない場合など、この方法とは別に、近似的に求める方法もあります。(こちらの方が一般的)

下図を見ても分かる?ようにR、G、Bの成分の比を比べ、
 Rが最大の場合、色相は-60°(300°)~60° (R方向の0°±60°)
 Gが最大の場合、色相は 60°~180°   (G方向の120°±60°)
 Bが最大の場合、色相は 180°~300°   (B方向の240°±60°)
の範囲内に色相は収まります。 
色相、彩度、明度の計算方法

以下、Rの値が最大の場合を例に取って説明したいと思います。

下図のように、2つの矢印の長さが分かれば、その矢印の比で角度60°を分割することで、角度(色相)を近似することが出来ます。
色相、彩度、明度の計算方法

R、G、Bの大きさがR≧G≧Bの場合

色相H = 60° × (G - B) / (R - B)
色相、彩度、明度の計算方法

R、G、Bの大きさがR≧B≧Gの場合

色相H = 60° × (G - B) / (R - G)

色相、彩度、明度の計算方法
となります。
ただし、この場合、色相の値が負となるので、
色相H = 60° × (G - B) / (R - G) + 360°

とします。

と、なる理屈を理解するのに苦労しました...
図中に書いてある黄色い正三角形がポイント!
正三角形なので、三辺の長さが等しい分けで。
R以外のGやBが最大となる場合も理屈は同じです。
120°づつ回転させて考えてみると分かります。

この式を一般的に書くと、R、G、Bの成分のうち、最大の成分をImax、最小の成分をIminとすると

ImaxRのとき
色相、彩度、明度の計算方法
ただし、H<0のとき、H = H + 360° とします。

ImaxGのとき
色相、彩度、明度の計算方法

ImaxBのとき
色相、彩度、明度の計算方法

となります。

明度Vの求め方】
明度は、もともとHSVの定義よりR、G、Bの成分のうち、最大の成分をImaxとすると

  明度V = Imax

とします。
明度Vの範囲は0~1.0となります。

彩度Sの求め方】
R、G、Bの成分のうち、最大の成分をImax、最小の成分をIminとすると

  彩度S = (Imax - Imin) / Imax

となります。
彩度Sの範囲は0~1.0となります。

色相、彩度、明度の計算方法

HLSの計算方法

【色相Hの求め方】
色相HはHSVの色相Hの求め方と同じです。

明度Lの求め方】
明度Lは、もともとHLSの定義よりR、G、Bの成分のうち、最大の成分をImaxとすると

  明度L = ( ImaxImin ) / 2

とします。
明度Lの範囲は0~1.0となります。

【彩度Sの求め方】
R、G、Bの成分のうち、最大の成分をImax、最小の成分をIminとすると

L≦0.5のとき

  彩度S = (Imax - Imin) / (Imax + Imin)

L>0.5のとき

  彩度S = (Imax - Imin) / ( - Imax - Imin)

となります。
彩度Sの範囲は0~1.0となります。

以下、補足説明です。

彩度Sは下図の外側の六角形に対して、内側の六角形の大きさの割合で求められます。

色相、彩度、明度の計算方法

この六角形の大きさはR,G,Bの輝度値が最大となる軸上で考えると比較的分かりやすいと思います。
今回はRの値が最大となる場合とします。

HLSは双六角錐モデルであるため、明度Lが0.5以下の場合、外側の六角形の大きさ(上図のE'の位置)は

  E' = Imax + Imin

で求まります。
色相、彩度、明度の計算方法

明度Lが0.5より大きい場合、外側の六角形の大きさ(上図のE'の位置)は

  E' = 2 - Imax - Imin

となります。
色相、彩度、明度の計算方法

以上のことから、最初の彩度Sの式が求まります。

色相、彩度、明度を使った色判別時の注意点

色相および彩度を用いると、画像の明るさ(明度)が変動しても似た色の領域を抽出する事が可能となりますが、彩度の値が小さい場合、つまりR、G、Bの値がそれぞれ近い場合は色相の値が不安定になります。

例えば、
 (R、G、B) = (121、120、120)の場合、 色相H = 0°
 (R、G、B) = (120、121、120)の場合、 色相H = 120°
 (R、G、B) = (120、120、121)の場合、 色相H = 240°

と、ほんの少しのR、G、Bの値の違いでも色相の値は大きく異なります。

また、色相Hは角度で表されるので、例えば1°も359°も値こそ離れていますが、どちらも0°±1°の範囲内で角度的には近いので、色相Hの値で単純に二値化処理することで色の領域を抽出する場合は注意して下さい。
 

Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【OpenCV】マスク処理

メインページOpenCV

OpenCVの画像間演算などの、例えばcvAddcvCopycvAndなどの関数の引数の最後にmaskという引数があります。
このマスクに何も指定しなければ、それぞれの関数では画像全体を処理するのですが、maskに入力画像、出力画像と同じ大きさの8ビット1チャンネルの画像を指定する事で、mask画像のうち、輝度値(画素値)が0以外部分のみを処理することが可能となります。
逆に言うと、輝度値が0の部分は何の処理もされないので、処理後の画像は、あらかじめ輝度値を0にするなり、背景画像を入れておくなりの初期化をしておいて下さい。
通常はmask画像には二値化された画像(輝度値が0と255)を指定します。

処理的にはcvSetImageROIで領域を指定して部分的に処理をするのに似ていますが、このmaskを用いる事で矩形以外の任意形状を指定することが可能となります。
ただし、入力画像出力画像mask画像の全ての画像の大きさ(widthとheight)が同じである必要があるので注意して下さい。

と、この機能を応用してクロマキーのような処理を行ってみました。

コピー元画像コピー先画像
コピー元画像
(Monalisa.bmp)
コピー先画像
(BackGround.bmp)

マスク画像
マスク画像
(Mask.bmp)

上記のような画像を用いて、以下のプログラムを実行しました。

//マスク処理(合成画像作成例)

//モナリザの画像

IplImage* src = cvLoadImage("Monalisa.bmp", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
//背景画像
 IplImage* dst = cvLoadImage("BackGround.bmp", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
//マスク画像(8ビット1チャンネルで読込)
IplImage* mask = cvLoadImage("Mask.bmp", CV_LOAD_IMAGE_GRAYSCALE);

//マスクの位置のみsrcからdstへコピーする
cvCopy(src, dst, mask);

//合成画像の表示
cvNamedWindow ("composite image", CV_WINDOW_AUTOSIZE);
cvShowImage ("composite image", dst);

//キー入力まち
cvWaitKey (0);

//解放
cvDestroyWindow ("composite image");
cvReleaseImage(&src);
cvReleaseImage(&dst);
cvReleaseImage(&mask);

そしてこちらが合成画像↓。 面白い!

画像合成処理

ちなみに、今回、マスク画像は手書きで作成しています。
 

Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

FinePix HS10で月の撮影してみた

メインページ

高倍率カメラの撮影サンプルとしては、わりと定番な月の撮影を私もやってみました。

光学30倍ズームなので、かなり拡大出来る事を期待していたのですが、思ったよりは拡大されず、こんな感じ↓でした。

FinePix HS10で月の撮影

撮影時の設定は、マニュアルモードで絞り開放(F5.6)、シャッタースピード遅め(1/25)、30倍ズーム、三脚固定による撮影を行ったのですが、詳細はこちら↓


FinePix HS10で月の撮影

そして、月の部分を切出した画像がこちら↓
(画像をクリックすると等倍表示されます。)

HS10で月の撮影

月のクレータまでくっきり見えて、個人的には、まぁまぁ満足な出来でした。

後から気が付いたのですが、HS10ではバルブ撮影が出来ないので、シャッターを押すとき少しブレてしまったかも?
ということで、2秒のセルフタイマー撮影をすれば良かった~と、ちょっと反省...

満月になったらもう一度チャレンジしてみようと思います。

満月の撮影

その後、満月を撮影しました。
狙った訳では無いのですが、撮影日(2010.8.25)は今年、最小の満月だったらしい。

FinePix HS10で月の撮影

今回の撮影条件は
マニュアルモードで絞り開放(F5.6)、シャッタースピード(1/250)、ISO100、30倍ズーム、三脚固定、2秒セルフタイマー

月の部分を等倍で切り出した画像がこちら↓
 
HS10で月の撮影

満月は半月の時と比べると、思ったよりボコボコ感がなく、ちょっとのっぺりした感じになってしまいました。
半月の方が雰囲気がある撮影ができますね?

そこで、ふと、画像処理的に考えてみた。
半月は、いわばローアングル照明なのに対し、満月はハイアングル照明。
表面の凹凸を撮影するにはローアングル照明の方が有利なのは、当たり前。

と、妙に納得。
 

Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C++/CLI、C#】enum型(列挙型)をキャストしないで使いたい

メインページC++/CLI プログラミング

C++/CLIでenumクラスを以下のように宣言し、

public enum class origin_enum
{
        top_left_origin,           //トップダウン
        bottom_left_origin     //ボトムアップ
};

このenumクラスを

int ImageType = origin_enum::top_left_origin;

というように使おうとすると

error C2440: '初期化中' : 'enumtest::enum_origin' から 'int' に変換できません。
この変換には static_cast、C スタイル キャストまたは関数スタイル キャストが必要です。

と怒られてしまうので、enumクラスを使う場合には

int ImageType = (int )origin_enum::top_left_origin;

とキャストしないといけない。
これが、ちょっとだけ使うならいいけど、何回も使う場合にはいちいちキャストするのは面倒なので、クラスで代用すれば同じ様な事が出来るのですが、ちょっとだけポイントがあって、以下のようにします。

C++/CLIの場合

public ref class origin_class
{
public:
        literal int top_left_origin = 0;            //トップダウン
        literal int bottom_left_origin = 1;     //ボトムアップ
};

literalを使うのがポイント!

C#の場合

public class origin_class
{
        public const int top_left_origin = 0;            //トップダウン
        public const int bottom_left_origin = 1;     //ボトムアップ
};

constを使うのがポイント!

ただ、結論からするとEnumを使う場合は数値として使うのではなく、Enumのまま使う(値を代入する方もEnumで使う)のがベスト
 

Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

日経ソフトウェア9月号(特集:PPL、OpenMP、TBB)

最近のプログラムではCPUがマルチコア化しているため、並列処理プログラミングは不可欠になって来ています。
下手なプログラムを作ると、最新のCPUのPCよりも、昔のPentium4の3GhzぐらいのPCの方が処理が速い!なんて事もあります。(といっても私はPen4マシンをメインで使っているのですが)

とはいえ、やっぱり並列プログラミングは避けて通れないでしょう。
最近では、OpenCVでもOpenMPやらTBBが適応され、並列化による高速化がはかられています。

という事でプログラミング系の雑誌では数少なくなってしまいましたが、この

日経ソフトウエア 2010年 09月号

の特集に

マルチコアを使いこなせ!
並列プログラミング入門


という記事が載っていました。




私もこれから勉強しようと思います...


Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【OpenCV】色変換(cvCvtColor)の組合せ

メインページOpenCV

OpenCVでカラー⇔モノクロ変換,YCrCb,XYZ,HSV,HLS,Lab 、ベイヤー⇔カラー変換などの変換にはcvCvtColor関数を用いますが、OpenCVのソースコードを見る限りだとマニュアルにある以上にいろいろな変換に対応しているようなので、ここにまとめておきます。

関数のリファレンスでは

void cvCvtColor( const CvArr* src, CvArr* dst, int code );

src入力画像
dst出力画像
code変換方法

とあるのですが、このcodeにいろいろあるので、ソースコードから抜き出しました。

【前提条件】
srcとdstの画像の大きさが等しいこと。
srcとdstのdepth(ビット数)が等しいこと。
depth(ビット数)はCV_8U、CV_16U、CV_32Fのいづれかのこと。

【codeの種類】
codenChanneldepth
srcdstsrc == dst
CV_BGR2BGRA
CV_RGB2BGRA
34CV_8U
CV_16U
CV_32F
CV_BGRA2BGR
CV_RGBA2BGR
43CV_8U
CV_16U
CV_32F
CV_RGB2BGR33CV_8U
CV_16U
CV_32F
CV_BGRA2RGBA44CV_8U
CV_16U
CV_32F
CV_BGR2BGR565
CV_BGR2BGR555
CV_RGB2BGR565
CV_RGB2BGR555
32CV_8U
CV_BGRA2BGR565
CV_BGRA2BGR555
CV_RGBA2BGR565
CV_RGBA2BGR555
42CV_8U
CV_BGR5652BGR
CV_BGR5552BGR
CV_BGR5652RGB
CV_BGR5552RGB
23CV_8U
CV_BGR5652BGRA
CV_BGR5552BGRA
CV_BGR5652RGBA
CV_BGR5552RGBA
24CV_8U
CV_BGR2GRAY
CV_RGB2GRAY
31CV_8U
CV_16U
CV_32F
CV_BGRA2GRAY
CV_RGBA2GRAY
41CV_8U
CV_16U
CV_32F
CV_BGR5652GRAY
CV_BGR5552GRAY
21CV_8U
CV_GRAY2BGR13CV_8U
CV_16U
CV_32F
CV_GRAY2BGRA14CV_8U
CV_16U
CV_32F
CV_GRAY2BGR565
CV_GRAY2BGR555
12CV_8U
CV_BGR2YCrCb
CV_RGB2YCrCb
CV_BGR2XYZ
CV_RGB2XYZ
CV_BGR2HSV
CV_RGB2HSV
CV_BGR2Lab
CV_RGB2Lab
CV_BGR2Luv
CV_RGB2Luv
CV_BGR2HLS
CV_RGB2HLS
3 or 43CV_8U
CV_BGR2YCrCb
CV_RGB2YCrCb
CV_BGR2XYZ
CV_RGB2XYZ
3 or 43CV_16U
CV_BGR2YCrCb
CV_RGB2YCrCb
CV_BGR2XYZ
CV_RGB2XYZ
CV_BGR2HSV
CV_RGB2HSV
CV_BGR2Lab
CV_RGB2Lab
CV_BGR2Luv
CV_RGB2Luv
CV_BGR2HLS
CV_RGB2HLS
3 or 43CV_32F
CV_YCrCb2BGR
CV_YCrCb2RGB
CV_XYZ2BGR
CV_XYZ2RGB
CV_HSV2BGR
CV_HSV2RGB
CV_HLS2BGR
CV_HLS2RGB
CV_Lab2BGR
CV_Lab2RGB
CV_Luv2BGR
CV_Luv2RGB
33 or 4CV_8U
CV_YCrCb2BGR
CV_YCrCb2RGB
CV_XYZ2BGR
CV_XYZ2RGB
33 or 4CV_16U
CV_YCrCb2BGR
CV_YCrCb2RGB
CV_XYZ2BGR
CV_XYZ2RGB
CV_HSV2BGR
CV_HSV2RGB
CV_HLS2BGR
CV_HLS2RGB
CV_Lab2BGR
CV_Lab2RGB
CV_Luv2BGR
CV_Luv2RGB
33 or 4CV_32F
CV_BayerBG2BGR
CV_BayerGB2BGR
CV_BayerRG2BGR
CV_BayerGR2BGR
13CV_8U

カラーの場合は基本的には CV_??BGR?? codeを用います。

これを見て初めてわかったのが、BGR565などの16bitカラーはnChannel = 1、depth = CV_16U ではなくて、nChannel = 2、depth = CV_8U と指定するようです。

※ここに書いた組み合わせはソースコードから抜き出したのみで、未評価です。



Loading...
スポンサーリンク



現在の閲覧者数: / 合計