1281704705 スキャン画像から色相・彩度・明度のデータをExcel形式でまとめて作成する

効率のよい方法が知りたいです。


添付画像で、36個の正方形の色情報について、
|C|M|Y|K|R|G|B|彩度|明度|
を列として、Excel形式でまとめたい場合、
効率よく楽に行うにはどのような方法が考えられるでしょうか。


フリーツールの組み合わせでも、マクロなどでも結構です。
できれば、「カーソルを合わせてクリック→Excelに1行分記録される」
のような手順が理想です。


ご教示のほど、何卒よろしくお願いします。



P.S.
ひたすら、カーソルを合わせて、
見ながら手入力する手順は、今でもできるので無しです。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/08/13 22:05:08
  • 終了:2010/08/14 22:26:27

ベストアンサー

id:cx20 No.2

cx20回答回数607ベストアンサー獲得回数1082010/08/14 18:49:07

ポイント100pt

指定位置の色情報を取得するスクリプトを書いてみました。

スクリプトは Windows 自動化ソフト「UWSC」を使用していますので、お手数ですが、ダウンロードをお願いします。

<スクリプト使用方法>

1. UWSC Free版 Ver4.6b をダウンロードします。

■ UWSC Free版 Ver4.6b
http://www.uwsc.info/download.html

2. uwsc46b.zip を任意の場所に解凍します。

  (UWSC.exe がプログラムの本体です。)


3. 以下のコードを「ColorPicker.uws」として名前をつけて保存してください。

// File : ColorPicker.uws
Option Explicit

Main()

Procedure Main()
    Dim x_pos, y_pos
    Dim color
    Dim r, g, b
    Dim c, m, y, k
    Dim h, s, v
    
    Print "C,M,Y,K,R,G,B,彩度,明度"
    While True
        x_pos = G_MOUSE_X
        y_pos = G_MOUSE_Y
        color = PeekColor( x_pos, y_pos )
        r = RGBtoR( color )
        g = RGBtoG( color )
        b = RGBtoB( color )
        // RGB → CMYK
        RGBtoCMYK( r, g, b, c, m, y, k )
        // RGB → HSV
        RGBtoHSV( r, g, b, h, s, v )
        // 取得した色で吹き出し表示
        Fukidasi( "RGB = (" + r + "," + g + "," + b + ")", x_pos, y_pos, 3, , , , color )
        // [Shift] キー押下で情報取得
        Ifb GetKeyState( VK_SHIFT ) Then
            //,,,,,,,彩度,明度
            Print c + "," + m + "," + y + "," + k + "," + r + "," + g + "," + b + "," + s + "," + v
        EndIf
        Sleep(0.5)
    Wend
Fend

Function RGBtoR(c)
    Result = c And $FF
Fend

Function RGBtoG(c)
    Result = ( c And $FF00 ) / $100
Fend

Function RGBtoB(c)
    Result = ( c And $FF0000 ) / $10000
Fend

// ■ JavaScript例文辞典 / RGB→CMYK
// http://www.openspc2.org/reibun/javascript/convert/006/
Procedure RGBtoCMYK( r, g, b, Var c, Var m, Var y, Var k )
    Dim bright_max
    Dim c0, m0, y0, k0

    bright_max = 1    // 最大輝度
    c0= bright_max - r / 255
    m0= bright_max - g / 255
    y0= bright_max - b / 255
    k0= min3( c0, m0, y0 )
    c = min2( bright_max, max2( 0, c0 - UCR( k0 ) ) )
    m = min2( bright_max, max2( 0, m0 - UCR( k0 ) ) )
    y = min2( bright_max, max2( 0, y0 - UCR( k0 ) ) )
    k = min2( bright_max, max2( 0, BG( k0 ) ) )
Fend

// ■ JavaScript例文辞典 / RGB→HSV
// http://www.openspc2.org/reibun/javascript/convert/017/
Procedure RGBtoHSV( r, g, b, Var h, Var s, Var v )
    Dim cmax, cmin, c
    h = 0
    s = 0
    v = 0

    If ( r >= g)   Then cmax = r Else cmax = g
    If ( b > cmax) Then cmax = b
    If ( r <= g)   Then cmin = r Else cmin = g
    If ( b < cmin) Then cmin = b
    v = cmax
    c = cmax - cmin
    If (cmax = 0) Then s = 0 Else s = c/cmax
    Ifb (s <> 0) Then
        Ifb (r = cmax) Then
            h = (g - b)/c
        Else
            Ifb (g = cmax) Then
                h = 2 + (b - r)/c;
            Else
                If (b = cmax) Then h = 4 + (r - g)/c
            EndIf
        EndIf
        h = h * 60
        If (h < 0) Then h = h + 360
    EndIf
    v = v / 255
Fend

Function min3( cc, mm, yy )
    Ifb ((cc < mm) And (cc < yy)) Then
        Result = cc
        Exit
    EndIf
    Ifb ((mm < cc) And (mm < yy)) Then
        Result = mm
        Exit
    EndIf
    
    Result = yy
Fend

Function min2( a, b )
    // 2値の小さい方を返す
    Ifb (a < b) Then
        Result = a
    Else
        Result = b
    EndIf
Fend

Function max2( a, b )
    // 2値の大きい方を返す
    Ifb (a > b) Then
        Result = a
    Else
        Result = b
    EndIf
Fend

Function UCR( n )
    // 下色除去。0~Kの範囲を返す(0:スミなし、K:スミ量)
    Result = n
Fend

Function BG( n )
    // スミ版合成処理
    Result = n
Fend

4. UWSC.exe を起動します。


5. UWSC の画面の左側にある「読込み(L)」ボタンにより「ColorPicker.uws」を参照します。


6. UWSC の画面の真ん中にある「再生(P)」ボタンによりスクリプトを実行します。

→ 任意の位置にマウスカーソルを合わせると、その場所の色情報が表示されます。

→ [Shift] キーを押下すると、その場所の「C,M,Y,K,R,G,B,彩度,明度」を UWSC のログエリアに CSV の形式で出力します。


7. プログラムを終了する場合は [STOP] ボタンをクリックするか [Alt]+[F2] キーを押下します。

8. UWSC のログエリアの内容をコピー&ペーストでメモ帳等に貼り付けます。

→ 名前をつけて保存で拡張子を「*.csv」にしていただくと、CSV 形式で保存できる為、Excel 等で開けるようになります。


あと、コメント欄を空けていただくとフォローできますので、

お手数ですが、コメント欄を空けていただけませんでしょうか?

id:mutamutamuta

ご回答ありがとうございます。

おぉ~!

軽い動作のもので、ここまでできるんですね。

ありがとうございます。

UWSCの言語でしょうか、コメントにあるjavascriptでしょうか。

とにかく驚きました。

自力で無理そうで久々に「はてな」を利用したのが、正解でした。

てっきり何かしら難しい言語が必要かもしれないと思っていましたが・・

これなら作るのは無理でも、読むことはできそうです。



気になるかどうかあれですが、与太話を。

投稿のきっかけは、完全な好奇心です。

普段気になる色、

自分や知り合いの肌の色に合うと思われる色の傾向を数値化したかっただけです。

そこから逆に合わない色、組み合わせなども割り出せるかと思いまして・・。

運用としておそらく、画像と画像データCSVをプリントアウトして、

見ながら考えてみたいと思っています。

(理想は後からでも検索できるよう、

 画像&色情報を1ファイルにまとめて管理できればと思いますが・・)


-----------------------------------------------------------------

P.S.

コメント欄開けました(と思います)

説明書きどおりやってみて、実行からCSV保存までできました。

何度かShiftに反応しない事がありましたが、

別なソフトとの関係か、調子が悪いのかと思っています。

-----------------------------------------------------------------

2010/08/14 21:12:05

その他の回答(1件)

id:gp334437g4723k87 No.1

gp334437g4723k87回答回数126ベストアンサー獲得回数202010/08/14 07:08:02

ポイント30pt

linuxであれば元画像ファイルをnetpbmのコマンドを使って元画像ファイルを36x36ピクセルにまで縮小。その上で、ここのピクセルをcropコマンドを使って切り抜き、ここの切り抜かれたファイルをGIMPのidentifyコマンドを使って画像ファイルの情報を取得すれば、RGMの色情報をバッチジョブでテキストファイルに出力することは可能です。


こういうことはよくやってますが、なんだか難しそうですが、多分、30~60分もあればスクリプトを作成することは可能です。一旦、バッチジョブのスクリプトができれば、解析するファイルが100個であろうが、1000個であろうが、自動でやってくれます。


以前、mpegファイルをエクセルのシート上にASCIIキャラクターを使って動画として表示変換するマクロを見たことがありますので、エクセル単体でこれらの機能を実装するのはできない話ではないかと思いますが、画像処理の専門家でエクセルの達人といったありえないような能力を備えた人とか、少なくとも一般人のレベルでは無理かと思います。

id:mutamutamuta

ご回答ありがとうございます。

いきなり難しいのであせりました。

バラバラに1ピクセル単位でファイル化してしまえば、範囲を指定する必要がない。

ばらけたファイルに対して、自動処理でファイル数分の情報を取得する流れですね

(合っているか不安です)参考になります。

LinuxやGIMPは触ったことがないので骨が折れそうです。


実は用途は、気になった画像で気になった個所の情報をクリック一発で取得したいだけだったりします^^;

大量のサンプルがあるわけではないです。



条件と当方の情報があいまいでした・・

------------------------------------------------------------------

<条件追記>

・できればWindows環境^^;

・添付図の36個の正方形(6×6)は場所によって色合いが変わるので、

 できることなら目で確認して画像内で位置指定したい。

-------------------------------------------------------------------

<質問者(私)のレベル>

ExcelはVBAが多少わかる程度、画像は必要に応じて多少触れる程度です。

-------------------------------------------------------------------


もしこの条件に合いそうな方法がありましたらお願いします。

2010/08/14 09:30:44
id:cx20 No.2

cx20回答回数607ベストアンサー獲得回数1082010/08/14 18:49:07ここでベストアンサー

ポイント100pt

指定位置の色情報を取得するスクリプトを書いてみました。

スクリプトは Windows 自動化ソフト「UWSC」を使用していますので、お手数ですが、ダウンロードをお願いします。

<スクリプト使用方法>

1. UWSC Free版 Ver4.6b をダウンロードします。

■ UWSC Free版 Ver4.6b
http://www.uwsc.info/download.html

2. uwsc46b.zip を任意の場所に解凍します。

  (UWSC.exe がプログラムの本体です。)


3. 以下のコードを「ColorPicker.uws」として名前をつけて保存してください。

// File : ColorPicker.uws
Option Explicit

Main()

Procedure Main()
    Dim x_pos, y_pos
    Dim color
    Dim r, g, b
    Dim c, m, y, k
    Dim h, s, v
    
    Print "C,M,Y,K,R,G,B,彩度,明度"
    While True
        x_pos = G_MOUSE_X
        y_pos = G_MOUSE_Y
        color = PeekColor( x_pos, y_pos )
        r = RGBtoR( color )
        g = RGBtoG( color )
        b = RGBtoB( color )
        // RGB → CMYK
        RGBtoCMYK( r, g, b, c, m, y, k )
        // RGB → HSV
        RGBtoHSV( r, g, b, h, s, v )
        // 取得した色で吹き出し表示
        Fukidasi( "RGB = (" + r + "," + g + "," + b + ")", x_pos, y_pos, 3, , , , color )
        // [Shift] キー押下で情報取得
        Ifb GetKeyState( VK_SHIFT ) Then
            //,,,,,,,彩度,明度
            Print c + "," + m + "," + y + "," + k + "," + r + "," + g + "," + b + "," + s + "," + v
        EndIf
        Sleep(0.5)
    Wend
Fend

Function RGBtoR(c)
    Result = c And $FF
Fend

Function RGBtoG(c)
    Result = ( c And $FF00 ) / $100
Fend

Function RGBtoB(c)
    Result = ( c And $FF0000 ) / $10000
Fend

// ■ JavaScript例文辞典 / RGB→CMYK
// http://www.openspc2.org/reibun/javascript/convert/006/
Procedure RGBtoCMYK( r, g, b, Var c, Var m, Var y, Var k )
    Dim bright_max
    Dim c0, m0, y0, k0

    bright_max = 1    // 最大輝度
    c0= bright_max - r / 255
    m0= bright_max - g / 255
    y0= bright_max - b / 255
    k0= min3( c0, m0, y0 )
    c = min2( bright_max, max2( 0, c0 - UCR( k0 ) ) )
    m = min2( bright_max, max2( 0, m0 - UCR( k0 ) ) )
    y = min2( bright_max, max2( 0, y0 - UCR( k0 ) ) )
    k = min2( bright_max, max2( 0, BG( k0 ) ) )
Fend

// ■ JavaScript例文辞典 / RGB→HSV
// http://www.openspc2.org/reibun/javascript/convert/017/
Procedure RGBtoHSV( r, g, b, Var h, Var s, Var v )
    Dim cmax, cmin, c
    h = 0
    s = 0
    v = 0

    If ( r >= g)   Then cmax = r Else cmax = g
    If ( b > cmax) Then cmax = b
    If ( r <= g)   Then cmin = r Else cmin = g
    If ( b < cmin) Then cmin = b
    v = cmax
    c = cmax - cmin
    If (cmax = 0) Then s = 0 Else s = c/cmax
    Ifb (s <> 0) Then
        Ifb (r = cmax) Then
            h = (g - b)/c
        Else
            Ifb (g = cmax) Then
                h = 2 + (b - r)/c;
            Else
                If (b = cmax) Then h = 4 + (r - g)/c
            EndIf
        EndIf
        h = h * 60
        If (h < 0) Then h = h + 360
    EndIf
    v = v / 255
Fend

Function min3( cc, mm, yy )
    Ifb ((cc < mm) And (cc < yy)) Then
        Result = cc
        Exit
    EndIf
    Ifb ((mm < cc) And (mm < yy)) Then
        Result = mm
        Exit
    EndIf
    
    Result = yy
Fend

Function min2( a, b )
    // 2値の小さい方を返す
    Ifb (a < b) Then
        Result = a
    Else
        Result = b
    EndIf
Fend

Function max2( a, b )
    // 2値の大きい方を返す
    Ifb (a > b) Then
        Result = a
    Else
        Result = b
    EndIf
Fend

Function UCR( n )
    // 下色除去。0~Kの範囲を返す(0:スミなし、K:スミ量)
    Result = n
Fend

Function BG( n )
    // スミ版合成処理
    Result = n
Fend

4. UWSC.exe を起動します。


5. UWSC の画面の左側にある「読込み(L)」ボタンにより「ColorPicker.uws」を参照します。


6. UWSC の画面の真ん中にある「再生(P)」ボタンによりスクリプトを実行します。

→ 任意の位置にマウスカーソルを合わせると、その場所の色情報が表示されます。

→ [Shift] キーを押下すると、その場所の「C,M,Y,K,R,G,B,彩度,明度」を UWSC のログエリアに CSV の形式で出力します。


7. プログラムを終了する場合は [STOP] ボタンをクリックするか [Alt]+[F2] キーを押下します。

8. UWSC のログエリアの内容をコピー&ペーストでメモ帳等に貼り付けます。

→ 名前をつけて保存で拡張子を「*.csv」にしていただくと、CSV 形式で保存できる為、Excel 等で開けるようになります。


あと、コメント欄を空けていただくとフォローできますので、

お手数ですが、コメント欄を空けていただけませんでしょうか?

id:mutamutamuta

ご回答ありがとうございます。

おぉ~!

軽い動作のもので、ここまでできるんですね。

ありがとうございます。

UWSCの言語でしょうか、コメントにあるjavascriptでしょうか。

とにかく驚きました。

自力で無理そうで久々に「はてな」を利用したのが、正解でした。

てっきり何かしら難しい言語が必要かもしれないと思っていましたが・・

これなら作るのは無理でも、読むことはできそうです。



気になるかどうかあれですが、与太話を。

投稿のきっかけは、完全な好奇心です。

普段気になる色、

自分や知り合いの肌の色に合うと思われる色の傾向を数値化したかっただけです。

そこから逆に合わない色、組み合わせなども割り出せるかと思いまして・・。

運用としておそらく、画像と画像データCSVをプリントアウトして、

見ながら考えてみたいと思っています。

(理想は後からでも検索できるよう、

 画像&色情報を1ファイルにまとめて管理できればと思いますが・・)


-----------------------------------------------------------------

P.S.

コメント欄開けました(と思います)

説明書きどおりやってみて、実行からCSV保存までできました。

何度かShiftに反応しない事がありましたが、

別なソフトとの関係か、調子が悪いのかと思っています。

-----------------------------------------------------------------

2010/08/14 21:12:05
  • id:mutamutamuta
    cx20 様

    もしまだご覧になっていたら教えていただきたいことがあります。

    文中のUCR(n),BG(n)というFunctionの部分です。
    受けた値をそのまま返しているように見えます。
    何か処理が行われているのでしょうか?

    締め切ってしまいましたが・・ご回答いただけたら幸いです。
  • id:cx20
    id:mutamutamuta さん

    > 文中のUCR(n),BG(n)というFunctionの部分です。
    > 受けた値をそのまま返しているように見えます。
    > 何か処理が行われているのでしょうか?

    「RGB→CMYK」と「RGB→HSV」の変換処理に関しましては、
    ネットで見つかった JavaScript のサンプルコードを
    UWSC に移植したものになっております。

    正直なところ、下色除去やスミ版合成処理がどのようなものなのか?は
    分かっておりません。

    もしかしたら、参考にしたサンプルコード自体に誤りのある可能性もございます。
    (一部、誤りと思われる箇所があった為、それは修正してあります。)

    大変恐縮なのですが「RGB→CMYK」と「RGB→HSV」の変換処理に関して、
    どうなると正しいのか?が分かりかねますので(参考にしたコードに誤りがある場合)、
    変換結果に誤りがございましたらご指摘いただけたら?と思います。
  • id:cx20
    あと、UWSC のプログラミングに興味がございましたら、
    以下のページを参考にいただければ?と思います。

    ■ UWSC 基礎文法最速マスター - CX's UWSC Diary - UWSCグループ
    http://uwsc.g.hatena.ne.jp/cx20/20100131/1264938584
  • id:mutamutamuta
    id:cx20 様

    > 大変恐縮なのですが「RGB→CMYK」と「RGB→HSV」の変換処理に関して、
    > どうなると正しいのか?が分かりかねますので(参考にしたコードに誤りがある場合)> 変換結果に誤りがございましたらご指摘いただけたら?と思います。
    Photoshopの結果と照らし合わせてみたところ、CMYKが怪しいかもしれません(笑
    ただ、私はUCR(n),BG(n)も誤りがあるか判断できないレベルです^^;
    RGBから計算できる方法を初めて知ったので、調べながら考えてみようと思います。


    > あと、UWSC のプログラミングに興味がございましたら、
    > 以下のページを参考にいただければ?と思います。
    >
    > ■ UWSC 基礎文法最速マスター - CX's UWSC Diary - UWSCグループ
    > http://uwsc.g.hatena.ne.jp/cx20/20100131/1264938584
    このようなページを開設されているんですね。
    UWSCは、普段便利な事が多そうなのでやってみます。
    また質問を投稿した時、もし見かけられて余裕がありましたらぜひよろしくお願いします。
  • id:cx20
    id:mutamutamuta さん

    > Photoshopの結果と照らし合わせてみたところ、CMYKが怪しいかもしれません(笑

    そうなんですね・・・
    残念ながら Photoshop は持ってないので、検証することはできないのですが、
    もしかしたら、カラープロファイルとか、そういった設定で値が変わってくるのかもしれません。

    > また質問を投稿した時、もし見かけられて余裕がありましたらぜひよろしくお願いします。

    回答できそうな分野でしたら回答させていただきたいと思います。
    また、質問時にコメント欄をあらかじめ空けておくと、他の回答者の方も
    フォローしやすかと思いますので、空けて置くことをお勧めします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません