人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

スキャン画像から色相・彩度・明度のデータをExcel形式でまとめて作成する
効率のよい方法が知りたいです。


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


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


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



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

1281704705
●拡大する

●質問者: mutamutamuta
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Excel カーソル クリック スキャン データ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● gp334437g4723k87
●30ポイント

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


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


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

◎質問者からの返答

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

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

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

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

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

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


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

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



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

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

<条件追記>

・できればWindows環境^^;

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

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

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

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

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

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


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


2 ● cx20
●100ポイント ベストアンサー

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

スクリプトは 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
 // C,M,Y,K,R,G,B,彩度,明度
 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 等で開けるようになります。


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

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

◎質問者からの返答

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

おぉ?!

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

ありがとうございます。

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

とにかく驚きました。

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

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

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



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

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

普段気になる色、

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

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

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

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

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

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


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

P.S.

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ