[解決済み] RGB→YUV→RGBの変換方法(両方式)
質問
RGBからYUVへ、YUVからRGBへ、互いに逆である一対の変換アルゴリズムが欲しいのです。 つまり、往復の変換では値が変化しないようにしなければならない。 (お望みなら、YUVをY'UV、YUV、YCbCr、YPbPrと置き換えてください)。
そのようなものは存在するのでしょうか? もしあれば、それは何ですか?
投稿ソリューション( C/C++でRGB->YUV変換を行うにはどうしたらよいでしょうか? , http://www.fourcc.org/fccyvrgb.php , http://en.wikipedia.org/wiki/YUV ) は、[0,255] へのクランプを省略した場合、逆数 (2 つの 3x3 行列は逆数) にしかなりません。 しかし、このクランプを省略すると、負の輝度のようなものができてしまい、YUV空間での画像処理に大きな支障をきたすことになります。 クランプを保持すると、変換が非線形になり、逆行列を定義するのが面倒になります。
どのように解決するのか?
はい、反転可能な変換が存在します。
エクアシスGmbH は、RGBからYUV、YCbCr、YPbPrへの反転変換と、それぞれがどのような状況に適しているかの説明、このクランプの本当の意味、そして参考文献へのリンクを掲載しています。 (良いSOの答えのように。)
私自身のアプリケーション(アナログ電圧ではなくjpg画像)にはYCbCrが適切だったので、この2つの変換のコードを書きました。 実際、多くの画像で、前後の値の差は256分の1以下であり、前後の画像は視覚的に区別できないほどでした。
PILの色空間変換 YCbCr -> RGB は、equasysのWebページを紹介したことでクレジットが得られます。
その他の回答は、equasysの正確さと簡潔さを向上させることができたかどうか疑わしいものです。
-
https://code.google.com/p/imagestack/ には、rgb_to_x と x_to_rgb が含まれています。 関数がありますが、コンパイルとテストはしていません。
-
Cory Nelsonの回答は似たような関数のコードにリンクしていますが、それによると の反転は一般に不可能であり、equasysと矛盾する。
-
FFmpeg、OpenCV、VLFeat、または ImageMagick のソースコードです。
2019年 編集 コメントで紹介したgithubのC言語コードです。
void YUVfromRGB(double& Y, double& U, double& V, const double R, const double G, const double B)
{
Y = 0.257 * R + 0.504 * G + 0.098 * B + 16;
U = -0.148 * R - 0.291 * G + 0.439 * B + 128;
V = 0.439 * R - 0.368 * G - 0.071 * B + 128;
}
void RGBfromYUV(double& R, double& G, double& B, double Y, double U, double V)
{
Y -= 16;
U -= 128;
V -= 128;
R = 1.164 * Y + 1.596 * V;
G = 1.164 * Y - 0.392 * U - 0.813 * V;
B = 1.164 * Y + 2.017 * U;
}
関連
-
[解決済み] std::string を const char* または char* に変換する方法
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] C++でintをstringに変換する最も簡単な方法
-
[解決済み] RGBから16進数、16進数からRGB
-
[解決済み] C言語とC++の両方で有効なコードを、それぞれの言語でコンパイルすると、異なる動作になることがありますか?
-
[解決済み] RGBカラーの知覚的な明るさを決定する公式
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン