2012-01-15 11 views
1

私はドキュメントを見ましたが、いくつかの数式を使って画像全体の色を変換する方法があるかどうかはわかりませんでした。これはカラーカーブの関数に何らかの形で関係しているのでしょうか?私はそれらがどのような効果を持っているのかよくわからないためです。私はそれらを試しましたが、各パラメータの効果を理解していません。OpenCVまたはSimpleCVでの色変換

例えば

:私は、画像を取得し、以下の式を用いて色をtranformする場合

(2R - 0.5G - B)/ 4

私は機能を読み、いくつかは、彼らのように見えますに適用されますが、パラメータの意味は私には不明です。 SimpleCVやOpenCVでこれを行う方法はありますか?

EDIT:変換することにより

、私は画像のRGB値を取得し、それらを新しいRGB値になるよう彼らにその式を適用する意味。またはその代わりに、式の、同様にマトリックスを使用する:

[Y] [0.299 0.587 0.114] [R]

[I] = [0.596 -0.274 -0.322] [G]

[ Q] [0.212 -0.523 0.311] [B]

+0

「変換」で、あなたに何を意味するの?すべてのカラーチャンネル用の関数を書くことができますか? – Blender

答えて

2

あなただけの操作を行います。

from SimpleCV import * 
img = Image('simplecv') 
(r,g,b) = img.splitChannels(False) #we pass false to break into color channels, not greyscale 
updated = ((r * 2) - (g * 0.5) - b)/4 
updated.show() 
0

あなたが使用しているインターフェイスを選択します。

もしあなたがpythonを使用しているのであれば、イメージは数が少ない配列として表されるので、かなりシンプルです。だから、( - 0.5G - 2R B)であった画像を取得する

あなたが行うことができます/ 4:マトリックス変換のために

imgF = img.astype('float') # convert from INT to FLOAT 
# note that OpenCV loads it as Blue,Green,Red. not RGB. 
imgTransformed = (2.*imgF[:,:,2] - .5*imgF[:,:,1] - imgF[:,:,0])/4 

は、OpenCVののtransform機能を見てみましょう。 マニュアルに従って、それが実行:各インデックスIため

dest(I) = mtx * src(I) 

だからあなたの質問の行列たとえば、あなたは

cv2.transform(img, [ [ 0.114, 0.587, 0.299], 
         [-0.322, 0.274, 0.596], 
         [ 0.311,-0.523, 0.212] ]) 

注意にしてください - 私はあなたのコラム1と3を入れ替えOpenCVの中の画像は、チャンネル順序B、G、Rの代わりに読み込まれているのでR、G、Bのうちの1つ。 SimpleCVでこれを行うには