
こんにちは
OpenCVを用いてカメラに映る画像の輝度値のCr,Cb成分(画素数全体の平均を取り)を表示する
プログラムを作ろうと考えているんですが、サイトを検索していると輝度値の求め方が・・・
Y→輝度値, Cr,Cb→輝度値からそれぞれR成分,B成分を引き取ったもの
R,G,B→RGBそれぞれの値,delta→8ビット画像(128) があるとしまして
Y = 0.299*R + 0.587*G + 0.114*B
Cr = 0.5*R - 0.419*G - 0.081*B + delta
Cb = -0.169*R - 0.332*G + 0.5*B + delta
と
Y = 0.299*R + 0.587*G + 0.114*B (Yは同じ式)
Cr = 0.713 * (R - Y) + delta
Cb = 0.564 * (B - Y) + delta
2通りあります.どちらの式も違う値(小数部の範囲で)が出ます.
どちらが正しいCr成分,Cb成分を求める式なのでしょうか?
あるいどちらがより正確な値が求められるのでしょうか?
画像処理を始めたばかりでなので,ご教授よろしくお願い致します.
No.2ベストアンサー
- 回答日時:
kmeeさんが言っているように、式の表記方法が違うだけで、YCrCb変換の式としては同じと思った方が良いと思います。
ちなみに、後半の式を展開しても
Y = 0.299*R + 0.587*G + 0.114*B
Cr = 0.499813*R - 0.41853*G - 0.08128*B + delta
Cb = -0.16864*R - 0.33107*G + 0.499704*B + delta
となり、RGBの値が0~255の場合、2通りの式の計算の差の絶対値が一番大きくても-0.23766
しかもcvCvtColorを使っているのであれば、RGBの値は入力も出力の8Bitで使っている?でしょうから、計算結果には、なんら影響はないと思います。
また、カメラで画像を撮影した時のRGBの値は、普通に2~3ぐらいはふらつくので、RGBの値が1以下の話をしても、あまり意味が無いと思います。
あえて、どちらが正確か?というと、YCrCbの定義を表している後半の式が良いと思います。
回答ありがとうございます。
RGBの値は結構変化するのですね・・・
予想以上でした^^;
展開したらほぼ同じ式になるんですね・・・
途中計算式が難しくてどらがいいのか迷っていました。
参考にさせて頂きます。
No.3
- 回答日時:
cvtColorでRGB→YCrCbに変換したら、3チャンネルあるうちのそれぞれのチャンネルにY,Cr,Cbが入っています。
Cr,Cbの値が欲しいなら
・cvtColorでRGB(BGR?)→YCrCbに変換
・splitでチャンネル毎に分離
http://opencv.jp/opencv-2.2/c/core_operations_on …
http://opencv.jp/opencv-2.2/cpp/core_operations_ …
で、Y,Cr,Cbそれぞれだけが入った1チャンネルの画像になります。
あるいは、RGB画像からR,G,Bをそれぞれ取り出す要領で、Y,Cr,Cbが取りだせます。
No.1
- 回答日時:
小数部の違いというのは誤差の範囲ではないかと。
それより、OpenCVを使っているのなら
http://opencv.jp/opencv-2.2/c/imgproc_miscellane …
http://opencv.jp/opencv-2.2/cpp/imgproc_miscella …
を使えばいいのではないでしょうか。
この回答への補足
どの式も正しいのでしょうか?
cvtColorのことでしょうか?
これは使っています.
実はYCrCb変換のCrとCbの値の入手したいのです.
こちらのサイトでは後者の式を用いてますね・・・どちらが正しいのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETでコンボボックスの1行目...
-
ユーザーフォームのテキストボ...
-
テキストボックスのvalueとtext...
-
VBA ドロップダウンリストを残...
-
C言語では0は・・・
-
setcookieで「path」に複数の値...
-
pingを行うプログラム
-
VBプログラム エラーが出ます
-
OracleでRecordCountが正しくな...
-
WebRequestでJavascriptの値取得
-
VBで三項演算子
-
DateLastModifiedのフォーマット
-
ComboBoxとListBoxとの連動
-
DataTableに対するLINQについて
-
【ASP.NET】 DataTextFieldの値...
-
MATLABのGUIについて教えていた...
-
フォーム間での変数の受け渡し
-
ACCESS VBA 画像ファ...
-
VB.NETでアクティブなformを知...
-
RGB値をL*a*b*に変換したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
値を返さないコード パス
-
VB.NETでコンボボックスの1行目...
-
VBA ドロップダウンリストを残...
-
C#の質問です
-
vb6のVSFlexGridで選択行、列の...
-
VB.NETでアクティブなformを知...
-
Excel VBAのリストボックスの値...
-
VB.NETのスクロールバーコント...
-
PL/SQLでのTO_DATEの時間取得に...
-
ユーザーフォームのテキストボ...
-
VBA(自然数)
-
マクロ 特定のセル値のみクリ...
-
マクロで奇数と偶数の値を2か所...
-
ACCESS VBA 画像ファ...
-
変数に代入してある数値を表示...
-
【ASP.NET】 DataTextFieldの値...
-
チェックした値を取得したい(C...
-
変数名の取得
-
windowsアプリケーションで小数...
おすすめ情報