2012-04-04 5 views
2

に、 < <分割する必要はありませんか?変換のYCrCbへと戻ってBGR

は... cvMerge(temp_y、CR、CB、0、ルーマ)

輝度成分について何かを。 < <輝度、Cr、Cbの順番はどのくらいですか?

答えて

4

異なる色空間に変換するには、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) 
+0

レスポンスいただきありがとうございます。輝度を使用する必要はありません。 cvSplit BGRは順番どおりにする必要がありますか?そして私は輝度で何かする必要があるので、私はBGR2YCrCbから変換してから、輝度をマージするためにcvMergeを使う必要があります。マージ後、YCrCb2BGRを使用してBGRに変換されます。したがって、輝度、Cr、Cbのマージの順番を決める上で問題があります。 >> cvMerge(temp_y、cr、cb、0、luma)または >> cvMerge(temp_y、cb、cr、0、luma) 両方とも異なる出力イメージを与えるためです。 – Mzk

+0

@水木会 - ご注文は重要です。あなたのコードを見ることなく、私はあなたが間違っていることを知りません。しかし、私はあなたが物事を行うことができることを示すために私の答えを更新しました。また、opencvの[documentarion](http://opencv.willowgarage.com/documentation/python/core_operations_on_arrays.html?highlight=split#Split)は本当にうれしく、相談する価値があります。 – fraxel

+0

これは、openCVがBGR2YCrCbを使用していることを知っているので、順序はこのようにする必要があります。cvMerge(Y、Cr、Cb、NULL、frame);ちょうどその命令に従うだけで十分です。そうですか? – Mzk

関連する問題