2017-08-11 8 views
1

グレースケールカラーアルゴリズムは、cvtColor()のドキュメントに記載されています。 (RGB2GRAYを検索する)。openCV RGB2Gray with custom weights

Y = 0.299 R + 0.587 G +私はマクベスチャートで働いていると、例えば検出した場合、それは低すぎる信号レベルをもたらすことができる

cv::Mat i_test_base; 
    cv::cvtColor(white_balance_image, i_test_base, CV_RGB2GRAY); 
    cv::imshow("cvtColor", i_test_base); 
    cv::waitKey(0); 

を使用しています0.114 B

青パッチ。チャンネル間の和またはRGB値の最大値を使用するほうが効果的です。

私は

cv::transform(white_balance_image, i_test_base, cv::Matx13f(1, 1, 1)); 
cv::imshow("transform", i_test_base); 
cv::waitKey(0); 

のようなものを試してみましたが、これは動作しません、私は白画像を取得します。 スケールする必要がありますか?

+0

サンプル入力画像を投稿できますか?現在の重みは、入力カラーの2/3で飽和してしまいます。おそらく、HSV画像のVチャンネルで作業すると、より良い結果が得られるでしょうか? –

+0

@DanMašek私は入力画像を投稿することができますが、これはちょうど普通のマクベスチャートです。異なる重みを付ける方法があるかどうかを知りたいだけです。 – Gilad

+0

floatに変換すると、通常の 'uint8'値で彩度/オーバーフローを気にせずに画像を扱うことができます。 –

答えて

1

cv::transformでは、飽和を避けるために合計の合計が1(またはそれ以下)になっていることを確認してください。

あなたはBGR画像に

cv::transform(white_balance_image, i_test_base, cv::Matx13f(0.114, 0.587, 0.299)); 

を使用している場合は、BGR2GRAYと同じ取得する必要があります。代わりに(1/3.0, 1/3.0, 1/3.0)を使用する場合は、3つのチャネルの平均を取得する必要があります。あなたの好みに合わせて調整してください。