2012-04-18 14 views

答えて

0

あなたが達成しようとしているところには意味がないと思います。 JPEG画像は既にDCTでいっぱいです。あなたは何をしようとする最初に理解する必要があり、OpenCVの+ C++のみメシエ

+0

私はJPEG画像に透かしを入れようとしています。私がそれをするには、画像を8x8のより小さいブロックに変換しなければならない。そして、「PEG画像は既にDCTでいっぱいです」という意味はどうですか? – stbb24

+0

私はあなたがいくつかの読書をすることをお勧めします--JPEGウィキペディアのエントリーはおそらく良い出発点でしょう。 – ZungBang

+0

@ stbb24:JPEGは画像データを圧縮するために内部的にピクセルのブロックでDCTを使用します。ウォーターマークを追加するには、95%はそのようなことに対処したくないと確信しています。 libjpeg(またはその他の代替ライブラリ)を使用し、JPEGを通常のRGB(または快適な場合はYUV)に圧縮解除し、画像にウォーターマークを適用して圧縮します。 DCTの特定のブロックだけを取り出し、修正してウォーターマークを適用して保存することが確実な場合は、libjpegの詳細を理解する必要があります。メーリングリストに尋ねるそのようなことが可能なら、私はあなたが迅速な解決策を得るだろうと確信しています。 – Pavel

1

libjpegはあなたの友達です作る...

次のコードスニペットは、JPEG画像からDCT係数をロードします(免責事項:それは引かれています私の4歳のプロジェクトオフ - メーリングリストへ):

struct jpeg_decompress_struct srcinfo; 
struct jpeg_error_mgr jsrcerr; 
jvirt_barray_ptr * src_coef_arrays; 
FILE * fp; 

srcinfo.err = jpeg_std_error(&jsrcerr); 
jpeg_create_decompress(&srcinfo); 
fp = fopen(filename, "rb"); 
jpeg_stdio_src(&srcinfo, fp); 
(void) jpeg_read_header(&srcinfo, TRUE); 
src_coef_arrays = jpeg_read_coefficients(&srcinfo); 
fclose(fp); 

... 
// use coefficients 
... 

(void) jpeg_finish_decompress(&srcinfo); 
jpeg_destroy_decompress(&srcinfo); 

係数へのアクセスビット毛深いです - 私はあなたがのlibjpegに同梱されますjpegtranユーティリティのソースコードを参照してください、それはそこに行うのかを確認することをお勧めします。

+0

より完全な例がここにあります:http://stackoverflow.com/a/4497493/27831 – ZungBang

関連する問題