2

BGR から YCrCb に変換して輝度を上げ、BGR に戻すことを試みました。

cvSplit(輝度、y、cr、cb、0); << 順番に分割する必要はありませんよね?

...輝度成分について何かをする

cvMerge(temp_y, cr, cb, 0, 輝度); << 輝度、Cr、Cb の正しい順番は?

4

1 に答える 1

5

異なる色空間間で変換するには、 cvtColorを使用する必要があります。BGR から YCC に移動するには、パラメーターを渡す必要がありますCV_BGR2YCrCb(また戻るにはCV_YCrCb2BGR)。正しい使い方は次のとおりです。

cvtColor(src, dest, CV_BGR2YCrCb)

srcソースフレームはどこにありdest、処理されたフレームになります (変更を行うためにここに置くことができますsrc)。

cvSplitマルチチャネル配列をいくつかの単一チャネル配列(そのコンポーネント)に分割するだけなので、これに必要なものではありません。したがって、ビデオの BGR フレームがある場合はcvSplit、B、G、R チャネルのみを分離して提供できます。

Y チャネルを分離して処理する場合は、次のように、色空間を変換してから分割してからマージすることができます。

cvtColor(frame, frame, CV_BGR2YCrCb)
cvSplit(frame, Y, Cr, Cb, NULL)
#Process the Y channel here.
cvMerge(Y, Cr, Cb, NULL, frame)
cvtColor(frame, frame, CV_YCrCb2BGR)

画像の明るさを上げたいだけの場合、より簡単な方法 (輝度を使用する必要はありません) は、各チャンネルにスケーラーを追加することです。

cvAddS(frame, cvScalar(30,30,30), frame)
于 2012-04-04T14:47:09.033 に答える