BGR から YCrCb に変換して輝度を上げ、BGR に戻すことを試みました。
cvSplit(輝度、y、cr、cb、0); << 順番に分割する必要はありませんよね?
...輝度成分について何かをする
cvMerge(temp_y, cr, cb, 0, 輝度); << 輝度、Cr、Cb の正しい順番は?
BGR から YCrCb に変換して輝度を上げ、BGR に戻すことを試みました。
cvSplit(輝度、y、cr、cb、0); << 順番に分割する必要はありませんよね?
...輝度成分について何かをする
cvMerge(temp_y, cr, cb, 0, 輝度); << 輝度、Cr、Cb の正しい順番は?
異なる色空間間で変換するには、 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)