【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

R,G,B,Y…などの色相をRGB値で表した範囲などで定義されているのでしょうか?
またHSVでは、色相はHの値ですが、
R,G,Bなどの色相の範囲の定義はあるのでしょうか?
S、Vで無彩色を示す範囲も分かる方がいたら教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>30≧H>90はY色相、90≧H>150はG色相など


>0≦S<0.1は無彩色など

そういった定義はどこからがYでどこからがGなのかという定義が存在しないと表現不能。(境界値と言う筈)
RGBが120度ずつで分割されていて 各頂点が Rの最大値・Gの最大値・Bの最大値、となっている
だからその間はそれらが混在してるわけだからR1%とG100% これは緑?赤?
人間的には緑かもしれないけれどデジタル、または理論数値的にはどちらも混ざった色という答えにしかならない。
他の値に関しても同様。

http://www.google.co.jp/search?hl=ja&lr=lang_ja& …
    • good
    • 0
この回答へのお礼

境界値という言葉が適切でしたね。
色に関してそのようなことは重々承知はしているのですが、、、
やはり境界値の定義は出来ないのですね。
わかりました、ありがとうございます。

お礼日時:2007/02/05 07:27

ええと 光の色の話なのかPCのRGBの話なのか



質問の文が変で 聞きたい事がさっぱりわからないんだけど?


HSV←→RGB  はRGBのbit深度が決定してないとPCでは変換できないよ。
算術的には%でなら求まる。

この回答への補足

文章が分かりづらくてごめんなさい。
RGBだと分かり辛いのでHSV空間だと
例えば、
30≧H>90はY色相、90≧H>150はG色相など
0≦S<0.1は無彩色など
そういった定義はありますか?
この説明なら分かりますか?

補足日時:2007/02/04 23:19
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q【OpenCV】二値画像後、白の部分の面積を求める

OpenCVで二値画像後、白の部分の面積を求めたいのですがどのようにしたらよいでしょうか?

OS : Linux FedoraCore7

Aベストアンサー

 こんにちは。
 当方はwindowsなのですが、openCVと言う事で、一応お話だけでも。
 iplのimageDataがグラフィックスを示す配列ですので、二値化した後、imageDataを走査しながら、ビットが立っていればカウントアップすれば白い面積が取れる様な気がします。
 以下参考程度に。

typedef struct
{
int dim;//総面積
int white;//白の面積
int black;//黒の面積
}MONOSPACE;
MONOSPACE space = {0};

//ファイルからイメージを読み込む
IplImage* img = ::cvLoadImage("TestImage.bmp", 0);

//二値化する(127以上で1を出力する)
::cvThreshold(img, img, 255 / 2, 1, CV_THRESH_BINARY);

for(int y = 0; y < img->height; y++)
{
for(int x = 0; x < img->width; x++)
{
const int val = img->imageData[y * img->widthStep + x];
if(val & 1)++space.white;//白色なのでカウントする
}
}

//総面積
space.dim = img->width * img->height;

//黒い面積
space.black=space.dim - space.white;

//iplの開放
::cvReleaseImage(&img);

 こんにちは。
 当方はwindowsなのですが、openCVと言う事で、一応お話だけでも。
 iplのimageDataがグラフィックスを示す配列ですので、二値化した後、imageDataを走査しながら、ビットが立っていればカウントアップすれば白い面積が取れる様な気がします。
 以下参考程度に。

typedef struct
{
int dim;//総面積
int white;//白の面積
int black;//黒の面積
}MONOSPACE;
MONOSPACE space = {0};

//ファイルからイメージを読み込む
IplImage* img = ::cvLoadImage("TestImage.bmp", 0);

/...続きを読む

QOpenCVによる連続静止画保存

OpenCVとVisual Studio 2005を使ってカメラ画像を出力し、キーを押すことで画像をファイルに保存しています。しかし、キーを押すたびに画像が上書きされてしまい、結局保存ファイルは一つだけになってしまい連続して画像ファイルが取得できません。下記のプログラムで下のほうに書いてあるcvSaveImage()関数にうまくカウンタを使ってやればいいと思うのですが、私の技量ではできませんでした。知っている方がいたら教えてください。よろしくお願いします。

//---------------------------------------------------------
// 概要 : カメラからの入力画像をそのまま表示
// File Name : image.c
// Library : OpenCV for MS-Windows 1.0
//---------------------------------------------------------

#include <stdio.h>
#include <highgui.h>

int main( int argc, char** argv ){
int key;//キー入力用の変数
CvCapture *capture;//カメラキャプチャ用の構造体
IplImage *frameImage;//キャプチャ画像用IplImage
char windowNameCapture[] = "Capture";//キャプチャした画像を表示するウィンドウの名前

//カメラを初期化する
if ( ( capture = cvCreateCameraCapture( -1 ) ) == NULL ) {
//カメラが見つからなかった場合
printf( "カメラが見つかりません\n" );
return -1;
}

//ウィンドウを生成する
cvNamedWindow( windowNameCapture, CV_WINDOW_AUTOSIZE );

//メインループ
while ( 1 ) {
//カメラからの入力画像1フレームをframeImageに格納する
frameImage = cvQueryFrame( capture );

//画像を表示する
cvShowImage( windowNameCapture, frameImage );

//'q'キーが入力されたらループを抜ける
key = cvWaitKey( 1 );
if ( key == 'q' ) {
break;
}else if( key == 'c'){
cvSaveImage("picture.bmp", frameImage );
}


}

//キャプチャを解放する
cvReleaseCapture( &capture );
//ウィンドウを破棄する
cvDestroyWindow( windowNameCapture );

return 0;
}

OpenCVとVisual Studio 2005を使ってカメラ画像を出力し、キーを押すことで画像をファイルに保存しています。しかし、キーを押すたびに画像が上書きされてしまい、結局保存ファイルは一つだけになってしまい連続して画像ファイルが取得できません。下記のプログラムで下のほうに書いてあるcvSaveImage()関数にうまくカウンタを使ってやればいいと思うのですが、私の技量ではできませんでした。知っている方がいたら教えてください。よろしくお願いします。

//------------------------------------------------...続きを読む

Aベストアンサー

OpenCV というよりも単に文字列の問題ですよね?
例えば以下のようにします。


int main( int argc, char** argv ){
  // 以下二行追加
  int counter = 0;
  char str[32];

  /* 省略 */

    key = cvWaitKey( 1 );
    if ( key == 'q' ) {
      break;
    } else if( key == 'c'){

      // 以下二行追加、修正
      sprintf(str, "img_%04d.bmp", counter++);
      cvSaveImage(str, frameImage );
    }

  /* 省略 */


VC2005 では sprintf() に警告が出るかもしれませんので、
問題があれば sprintf_s() などを使って下さい。

QOpenCVによる面積算出

OpenCVによる面積算出

現在OpenCVを使用して、2値化した画像を取得し保存。そして取得した画像を読み込み白い部分の面積を求めるプログラムを作成中なのですが、正直分かりません;;

どのように作ればいいのか、OpenCvのプログラミングブックやGoogleで検索しても、自分で作成するに至れない状況です。もしよろしければ、アドバイス等をいただけると幸いです;;

Aベストアンサー

こんばんは.

「白い部分の面積」というのは,「(連結している)白い部分の(個別の)面積」であると
仮定して回答させて頂きます.
(でなければ,単純にカウンタ変数を用意した上で,画像を左上の画素から右下の画素まで読んでいって,値が0だったら無視,255だったらカウントアップ,で済む話です)

それで,「連結している白い部分の個別の面積」を求める処理はラベリング処理といいます.
わかりやすい概念図が下記ページに載っています.
http://imagingsolution.blog107.fc2.com/blog-entry-193.html

また,OpenCV用のラベリング関数を自作して公開してくれている人が居ます.
http://oshiro.bpe.es.osaka-u.ac.jp/people/staff/imura/products/labeling
勉強のためではなく,急ぎならこちらを利用させてもらっても良いでしょう.

以上,参考になれば幸いです.

Q色相の平均値の算出方法

画像内の色相の平均値の算出方法

画像を、HSV色空間で表現した場合に、
色相の平均値を算出する方法を教えていただきたく思います。
色相は円環で表現される為、単純に加算して画素数で割るという手法に疑問を覚えます。

問題点の例:
色相を0~360の範囲で表現した場合において、
0の画素が5ピクセル分、
359の画素が5ピクセル分存在するような画像の場合、
単純に平均を算出すると179.5となります。
しかし、色相は円環で表現される為、
平均値としては359.5の値をとるのが正しいと私は思います。

上記の問題に対して、解決案をご教授願いたく思います。
もしくは私の解釈に間違いがありましたら、ご指摘をお願いいたします。
よろしくおねがいいたします。

Aベストアンサー

色空間には詳しくありませんが,似た問題として一般角や (日付をまたいだ) 時刻の
平均値を求める方法を考えたことがあります.次のような方法はどうでしょうか?

・色相環を単位円 (原点中心) で表す.

・色相を単位円上の1点 r=(x, y),またはそれに対応する角度θで表す.
 (x=cosθ,y=sinθ)

・色相 θ[1],θ[2],…,θ[n] の平均を次のように定義する.

  r[i] = (x[i],y[i]) = (cosθ[i],sinθ[i]).

  R ≡ Σ{i=1,n} r[i].

  R≠0 ならば r[average] ≡ R / |R| = (cosθ[average],sinθ[average]).

  R=0 (無彩色) となるのは例えば,
  ・n=2 で θ[1] と θ[2] が補色関係の場合.
  ・n=3 で θ[1~3] が同輝度の R,G,B (または C,M,Y) の場合.


この方法だと,

> 0の画素が5ピクセル分、
> 359の画素が5ピクセル分存在するような画像の場合、

θ[1~5]=0°,θ[6~10]=359°.

R = 5 * (cos 0°, sin 0°) + 5 * (cos 359°, sin 359°)
 ≒ (9.9992, -0.087262)
θ[average] = 359.5°

色空間には詳しくありませんが,似た問題として一般角や (日付をまたいだ) 時刻の
平均値を求める方法を考えたことがあります.次のような方法はどうでしょうか?

・色相環を単位円 (原点中心) で表す.

・色相を単位円上の1点 r=(x, y),またはそれに対応する角度θで表す.
 (x=cosθ,y=sinθ)

・色相 θ[1],θ[2],…,θ[n] の平均を次のように定義する.

  r[i] = (x[i],y[i]) = (cosθ[i],sinθ[i]).

  R ≡ Σ{i=1,n} r[i].

  R≠0 ならば r[average] ≡ R / |R| = (cosθ[aver...続きを読む

Qプログラム設計書の書き方

僕は新人SEです。
今、上司の方からあるシステムの基本設計書・システム設計書・プログラム設計書を作り、プログラミングまでしてから単体テスト・結合テストもやるように言われています。(全て1人で)

おそらく経験のある方ならすぐにできてしまうようなシステムで、上司の方も勉強のために全てやらせているようです。

今、基本設計書・システム設計書まではなんとかできて、プログラム設計書の作成に取り掛かりたいのですが、初めての経験で実際のプログラム設計書には何をどのように書いているものなのかも全く見当もつかずにいるので全く何も書けません。

上司さんは今週忙しいようで
「来週見てあげるから自分で調べたりしてやってみて」
と言っています。
ですが、全く何もできずにいるのもイヤなので何かそれらしいものでも書いてみたいのですが…プログラム設計書とは何をどう書いてあるものなのでしょうか?

日本語が書いてあるのかプログラムが書いてあるものなのか…
そういったところからわからないので少しでも何か教えていただきたいです。
宜しくお願いします。

Aベストアンサー

こんにちは。
No.1様のご回答通りなのですが会社によって異なります。
というのを踏まえた上で・・・うちではという回答になりますが

・日付 2009/10/10
・版 初版(その後バージョンアップで改定するため、改定ナンバー必須)
・タイトル 企業情報印刷(ここでは決定済み名称)
・発注仕様書ナンバー(正式にお客さまと契約で決めた発注番号を記載)
・作成者 boo_boo_suu
・使用言語 Visual C++
・使用データベース ORACLE
・使用帳票アプリケーション Crystal Reports
・フロー図(Visioで埋め込み図)
・概要説明 
メインメニューから呼び出され企業情報の印刷条件を入力し、クリスタルレポートの帳票情報から企業情報ファイル(KIGYOU_INFO)ファイルを呼び出し印字します。
・全企業情報が一覧で印字可能である。
・特定一企業(企業コード指定)での印字も可能である。
・一企業が指定された場合は企業情報を画面表示する。

-----------------------------------
で・・・・プログラム仕様書はこのくらい。
命令書ですからコードそのものは打ちません。
これみて作ってもらわないといけないので日本語メインです。

あとはDBの仕様書をみてもらったりしてプログラムのローカルルール、画面サイズ、文字サイズ プロシージャ定義やら定数や変数、フォーム、構造体定義書などプログラム書くときの決まりごとに添ってPGさんに打ってもらっています。
一応、図とかつけてみました。(^-^;;
全体の雰囲気はこんな感じだとご理解いただければ幸いです。
ではでは~。

こんにちは。
No.1様のご回答通りなのですが会社によって異なります。
というのを踏まえた上で・・・うちではという回答になりますが

・日付 2009/10/10
・版 初版(その後バージョンアップで改定するため、改定ナンバー必須)
・タイトル 企業情報印刷(ここでは決定済み名称)
・発注仕様書ナンバー(正式にお客さまと契約で決めた発注番号を記載)
・作成者 boo_boo_suu
・使用言語 Visual C++
・使用データベース ORACLE
・使用帳票アプリケーション Crystal Reports
・フロー図(Visioで...続きを読む

Qfloat型とdouble型の変数の違いを教えてほしいです

float型とdouble型の変数の違いを教えてほしいです
2Dゲームを作っててdoubleの変数を使ってたんですが使ってはだめだと先輩に言われたんです。
理由を聞いたら、先生が「doubleは使わないほうがいい」と言われたらしくてちゃんとした理由がわかりませんでした。
それを知って何をするということではないんですが、気になって調べても出てこなかったので質問させてください。
まだゲーム作りを始めたばっかりでぜんぜん詳しくないですが教えてくれたら助かります。

Aベストアンサー

doubleとfloatでは、精度が違い、そのためメモリに占める大きさも違います。
また、一般的には、桁が多いとその分計算時間がかかります。
ですから、精度が必要ない場面では、floatを使う、というのも一つの考えかたです。

ですが、実際には「一概に言えない、処理系依存」です。

以前は全てCPUで計算していたので、精度=計算量でした。
しかし、最近では浮動小数点演算専用の回路が付いているケースが多く、計算時間は同じだったり、doubleに変換が必要でその分floatの方が遅かったり、floatでの演算はより高速にできたり、と様々です。
32bitCPUでは、32bitのfloatの方が扱いやすいでしょうが、64bitCPUでは64bitのdoubleの方が扱いやすいかもしれません。
Cのmath.hで使える標準関数はdouble型のものがほとんどです。三角関数は2Dのゲームでも使う機会が多いのではないでしょうか。sinもcosもdouble型です。内部演算は当然doubleですので、変数にfloatを使ったからと早くはならず、むしろfloat型の変数に入れるときに暗黙の型変換が発生する分遅くなる可能性もあります。

そういった背景を考え検討した結果、floatを使う方がよい、と判断したのならいいのですが、「先生に言われた」では理由になりません。
聞けるのなら、その先生に理由を聞いてください。真意がわからないうちは、鵜呑みしないことです。

doubleとfloatでは、精度が違い、そのためメモリに占める大きさも違います。
また、一般的には、桁が多いとその分計算時間がかかります。
ですから、精度が必要ない場面では、floatを使う、というのも一つの考えかたです。

ですが、実際には「一概に言えない、処理系依存」です。

以前は全てCPUで計算していたので、精度=計算量でした。
しかし、最近では浮動小数点演算専用の回路が付いているケースが多く、計算時間は同じだったり、doubleに変換が必要でその分floatの方が遅かったり、floatでの演算はより高速...続きを読む

Q【OpenCV】BGRからHSVへの画像変換

OpenCVを使って任意の画像データをBGR表色系からHSV表色系に変換するプログラムです。
コンパイルして実行してみたところ、添付画像のように元画像とは色味が異なった画像が出力されてしまいます。
他の画像ファイルを使ってみましたが結果は同じでした。
HSVへの変換がうまくいってないのでしょうが、調べても原因は分かりませんでした。
どなたか分かる方がいらっしゃいましたらご指摘お願いします。

以下にコードを載せます。

#include <cv.h>
#include <highgui.h>

int main (int argc, char **argv){
IplImage *src_img=0; // 入力画像
IplImage *hsv_img=0; // hsvに変換された画像

// (1)画像を読み込む
src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);

// (2)読み込んだ画像をhsvに変換する
hsv_img = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_8U, 3);
cvCvtColor (src_img, hsv_img, CV_BGR2HSV);

// (3)画像を表示,キーが押されたときに終了
cvNamedWindow ("Source_Image", CV_WINDOW_AUTOSIZE);
cvNamedWindow ("HSV_Image", CV_WINDOW_AUTOSIZE);
cvShowImage ("Source_Image", src_img);
cvShowImage ("HSV_Image", hsv_img);
cvWaitKey (0);

// (4)メモリ解放
cvDestroyWindow ("Source_Image");
cvDestroyWindow ("HSV_Image");
cvReleaseImage (&src_img);
cvReleaseImage (&hsv_img);

return 0;
}

OS:Windows7
OpenCVのバージョン:2.1
添付画像で用いた画像の形式:png

OpenCVを使って任意の画像データをBGR表色系からHSV表色系に変換するプログラムです。
コンパイルして実行してみたところ、添付画像のように元画像とは色味が異なった画像が出力されてしまいます。
他の画像ファイルを使ってみましたが結果は同じでした。
HSVへの変換がうまくいってないのでしょうが、調べても原因は分かりませんでした。
どなたか分かる方がいらっしゃいましたらご指摘お願いします。

以下にコードを載せます。

#include <cv.h>
#include <highgui.h>

int main (int argc, char **argv){
Ip...続きを読む

Aベストアンサー

cvCvtColorで変換したものは、別に色空間情報を持っているわけではありません。
CV_BGR2HSV で変換した前も後も「3チャンネルの画像」でしかありません。

cvShowImageは BGRの3チャンネル画像をカラー表示することはできますが、HSVの画像から色を復元するようなことはしません。
そもそも、画像がBGRなのがHSVなのか判断できないのですから。

QC#で、画像の、指定した座標の色情報を取得し

C#、Visual Studio2008を使用しています。
ピクチャーボックスに画像を読み込み、その画像の、指定した座標の色情報を取得したいです(RGB値)。
画像の読み込みまではできました。
その次の指定した座標の色情報を取得するようなメソッド?コマンド?は存在するのでしょうか?
検索しても出てこないため、ご存知でしたら教えていただけると助かります。よろしくお願いします。

Aベストアンサー

http://msdn.microsoft.com/ja-jp/library/system.drawing.bitmap.getpixel.aspx

これを参考に。


Color c=((Bitmap)(pictureBox1.Image)).GetPixel(x, y);


こんな感じ?

参考URL:http://msdn.microsoft.com/ja-jp/library/system.drawing.bitmap.getpixel.aspx


人気Q&Aランキング