PNG 형식을 이해하려고합니다.주어진 PNG 이미지에서 픽셀 값을 추출하려고합니다.
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
등가 자 :
이미지는 16 진수 편집기에서 here에서 가져
, 그것은 다음과 같습니다
이 PNG 이미지를 고려
동일한 823,436,983,210는 HEX 편집기 스크린을 아래에 도시된다 : I은 헤더 부와 RGB의 화소 값을 추출하기 위해 화상을 리버스 엔지니어링하는 것을 시도하고
. 내가 PNG에 대해서도 here에 대해 읽었으며 지금까지이 이미지에 대해 다음과 같이 언급했습니다.
IHDR 청크는 반드시 FIRST로 나타나야합니다. 그것은 포함
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이 있어야합니다. 청크, 하나 이상의 IDAT 청크 및 IEND 청크가 있습니다.
2 덩어리 : 길이
00 00 00 0D
3 덩어리 : 청크 유형 IHDR입니다
49 48 44 52
.
http://www.w3.org/TR/PNG-Chunks.html
4- 청크 : 이미지의 폭 (십진수 128)
00 00 00 80
-5- 청크 : 이미지의 높이 (68 진수)
00 00 00 44
6- 청크 : 비트 깊이 (1 바이트)
08
7- 덩어리 : 색상 유형
02
8 압축 방법
00
9 필터 방법 :
00
10 인터레이스 방식 : 다음 데이터 무엇
00
11-?
C6 3E AA 25 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 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 8 C 37 68 03 20 DB FB ED 96 65 00 00 00 00
14- IEND :
49 45 44 4E
15 마지막 4 바이트
AE 42 60 82
다음은 무엇입니까?
위의 11, 13 및 15 점을 이해할 수 있습니까? 픽셀 값은 어디에 있습니까? 나는이 세부 사항을 알고 나면
, 나는 내 자신의 16 비트 PNG 이미지를 생성합니다 : 이미지는 (128 X 68 픽셀) 이러한 세부 사항을 알 수
목적 가지고있다. 나는 이미 픽셀 값을 가지고 있으므로 머리말 등을 소개하는 것이 내 일일 것이다.
이 작업을 수행 할 수있는 소프트웨어가 있는지는 잘 모른다.
내가 때문에 압축의 지금 이해 UPDATE, 나는 픽셀 값을 찾을 수 없을 것입니다.
OpenCV에서 파일을 작성하고 png로 저장할 수 있다는 생각이 들었습니다. 글쎄 지금 내 직접 질문 : 나는 그레이 스케일 16 비트 픽셀 값을 가지고 이진 파일이 있습니다. 이 OpenCV 16 비트 PNG로 쓸 수 있습니까?
방금 Compression에 대해 알아 봤지만 정확한 픽셀 값을 얻지 못했습니다. 하지만 11과 15에 대해서 말해 줄 수 있어요? – gpuguy
감사합니다, 당신의 대답은 나에게 매우 도움이됩니다. 나는 그것을 테스트하고 결과를 게시 할 것입니다. – gpuguy
+1하지만 "너는 방금 시간 낭비했다"는 말에는 완전히 동의하지 않는다. 그럼에도 불구하고 PNG의 내부에 대해 배우는 것이 현재 작업에는 필요하지 않을 수도 있습니다. – leonbloy