1

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

例: 画像を取得し、次の式を使用して色を変換する場合

(2R - 0.5G - B)/4

私は関数を読んで、それらが適用されるように見えるものもありますが、パラメータの意味は私には不明です. SimpleCV や OpenCV でこれを行う方法はありますか?

編集:

変換とは、画像の RGB 値を取得し、その式をそれらに適用して、それらが新しい RGB 値になるようにすることを意味します。式の代わりに OR を使用して、次のような行列を使用します。

[Y] [0.299 0.587 0.114][R]

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

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

4

2 に答える 2

2

SimpleCV でこれを行うには、次のようにします。

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()
于 2012-01-16T21:52:36.217 に答える
0

使用しているインターフェイスによって異なります。

Python を使用している場合、画像は numpy 配列として表されるため、かなり単純です。

したがって、(2R - 0.5G - 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関数をご覧ください。ドキュメントに従って、次のように実行します。

dest(I) = mtx * src(I)

インデックスごとにI

したがって、質問のマトリックスの例では、次のようにします

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

注 - OpenCV では、画像が R、G、B ではなく B、G、R のチャネル順で読み込まれるため、列 1 と 3 を交換しました。

于 2012-01-16T00:20:22.510 に答える