PNG形式を理解しようとしています。
このPNG画像を検討してください:
画像はこちらから
Hex Editor では、次のようになります。
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 00 80 00 00 00 44 08 02 00 00 00
C6 25 AA 3E 00 00 00 C2 49 44 41 54 78 5E ED D4 81 06 C3 30 14 40 D1 B7 34 DD FF FF 6F
B3 74 56 EA 89 12 6C 28 73 E2 AA 34 49 03 87 D6 FE D8 7B 89 BB 52 8D 3B 87 FE 01 00 80
00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 04 00 80 00 00 10 00 00 02 00 40
00 00 08 00 00 01 00 20 00 00 00 D4 5E 6A 64 4B 94 F5 98 7C D1 F4 92 5C 5C 3E CF 9C 3F
73 71 58 5F AF 8B 79 5B EE 96 B6 47 EB F1 EA D1 CE B6 E3 75 3B E6 B9 95 8D C7 CE 03 39
C9 AF C6 33 93 7B 66 37 CF AB BF F9 C9 2F 08 80 00 00 10 00 00 02 00 40 00 00 08 00 00
01 00 20 00 00 04 00 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 8C 37 DB
68 03 20 FB ED 96 65 00 00 00 00 49 45 4E 44 AE 42 60 82
同等の文字:
‰PNG........IHDR...€...D.....Æ%ª>...ÂIDATx^íÔ..Ã0.@Ñ·4Ýÿÿo³tVê‰.l(sâª4I.‡ÖþØ{‰
»R.;‡þ..€.......@....... ....€.......@....... ...Ô^jdK”õ˜|Ñô’\\>Ïœ?sqX_¯
‹y[î–¶GëñêÑζãu;湕.ÇÎ.9ɯÆ3“{f7Ï«¿ùÉ/.€.......@....... ....€.......@....... ..Œ7Ûh.
ûí–e....IEND®B`‚
次の HEX エディタのスクリーンショットにも同じことが示されています。
この画像をリバース エンジニアリングして、ヘッダー部分と RGB ピクセル値を抽出しようとしています。PNGとhereについて読みましたが、これまでのところ、この画像について次のことに注意しました。
IHDR チャンクは最初に表示される必要があります。を含む:
Width: 4 bytes
Height: 4 bytes
Bit depth: 1 byte
Color type: 1 byte
Compression method: 1 byte
Filter method: 1 byte
Interlace method: 1 byte
以下では、HEX データを順番に読み始めています。
1- 最初の 8 バイト: これは 8 バイトの署名です。
89 50 4E 47 0D 0A 1A 0A
同様に、これは次のとおりです。HEX エディターで表示される %PNG
有効な PNG イメージには、IHDR チャンク、1 つ以上の IDAT チャンク、および IEND チャンクが含まれている必要があります。
2- チャンク: 長さ
00 00 00 0D
3チャンク:チャンクタイプ
49 48 44 52
これがIHDRです。
http://www.w3.org/TR/PNG-Chunks.html
4- チャンク: 画像の幅 (10 進数 128)
00 00 00 80
5- チャンク: 画像の高さ (10 進数 68)
00 00 00 44
6- チャンク: BIT DEPTH (1 バイト)
08
7- チャンク: カラータイプ
02
8-圧縮方法
00
9- フィルター方法:
00
10- インターレース方式:
00
11- 次のデータは何ですか?
C6 25 AA 3E 00 00 00 C2
12-- IDAT
49 44 41 54
13- このデータは何ですか (IDAT 後):
78 5E ED D4 81 06 C3 30 14 40 D1 B7 34 DD FF FF 6F B3 74 56 EA 89 12 6C 28 73 E2 AA 34 49 03 87 D6 FE D8 7B 89 BB 52 8D 3B 87 FE 01 00 80 100 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 04 00 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 00 D4 5E 6A F 64 4B 9 C 4 C 5 C 94 F 94 3E CF 9C 3F 73 71 58 5F AF 8B 79 5B EE 96 B6 47 EB F1 EA D1 CE B6 E3 75 3B E6 B9 95 8D C7 CE 03 39 C9 AF C6 33 93 7B 66 37 CF AB BF F9 C9 2F 08 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 04 00 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 8C 37 DB 206 ED0 6 0 FB0 3 00 00
14- IEND:
49 45 4E 44
15 - 最後の 4 バイト
AE 42 60 82
これは何 ?
上記のポイント11、13、および15を理解するのに役立つものはありますか? そして、ピクセル値はどこにありますか? 画像には(128 x 68ピクセル)があります
これらの詳細を知る目的:
これらの詳細がわかったら、独自の 16 ビット PNG 画像を生成します。私はすでにピクセル値を持っているので、私の仕事はヘッダーなどを導入する
ことです。この仕事を実行できるソフトウェアがあるかどうかはわかりません。
アップデート
圧縮が原因で、ピクセル値を特定できないことがわかりました。
OpenCVでファイルを書き込んでpngとして保存できるという考えが浮かびました。さて、私の直接の質問は次のとおりです。グレースケールの16ビットピクセル値を持つバイナリファイルがあります。これを OpenCV で 16 ビット PNG として記述できますか?