2012-06-19 6 views
11

पीएनजी प्रारूप को समझने की कोशिश कर रहा है।किसी दिए गए पीएनजी छवि से पिक्सेल मान निकालने का प्रयास

पर विचार करें इस 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 

समतुल्य वर्ण:

enter image description here

छवि here

से लिया जाता है हेक्स संपादक में, यह इस तरह दिखता है

‰PNG........IHDR...€...D.....Æ%ª>...ÂIDATx^íÔ..Ã[email protected]Ñ·4Ýÿÿo³tVê‰.l(sâª4I.‡ÖþØ{‰ 
»R.;‡þ..€[email protected] ....€[email protected] ...Ô^jdK”õ˜|Ñô’\\>Ïœ?sqX_¯ 
‹y[î–¶GëñêÑζãu;湕.ÇÎ.9ɯÆ3“{f7Ï«¿ùÉ/.€[email protected] ....€[email protected] ..Œ7Ûh. 
ûí–e....IEND®B`‚ 

ही हेक्स संपादक का स्क्रीनशॉट निम्नलिखित में दिखाया गया है:

enter image description here

मैं इस छवि इंजीनियर हैडर हिस्सा है और आरजीबी पिक्सेल मान निकालने के लिए उल्टा करने के लिए कोशिश कर रहा हूँ। मैंने PNG और here के बारे में भी पढ़ा है, और अब तक मैंने इस छवि के बारे में निम्नलिखित नोट किया है:

आईएचडीआर खंड पहले दिखाई देना चाहिए। यह शामिल हैं:

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 

नीचे मैं अनुक्रम में पढ़ने हेक्स डाटा शुरू कर रहा हूँ:

1- सबसे पहले 8 बाइट्स: यह 8-बाइट हस्ताक्षर

89 50 4E 47 0D 0A 1A 0A 

है समान रूप से यह है: एचईएक्स संपादक

में एक पीएनजी छवि को एक आईएचडीआर होना चाहिए खंड, एक या अधिक आईडीएटी भाग, और एक आईएनडी खंड।

2- हिस्सा: लंबाई

00 00 00 0D 

3-Chunk: हिस्सा प्रकार

49 48 44 52 

कौन सा IHDR है।

http://www.w3.org/TR/PNG-Chunks.html

4- हिस्सा: छवि की चौड़ाई (दशमलव में 128)

00 00 00 80 

5- Chunk: छवि के ऊंचाई (दशमलव में 68)

00 00 00 44 

6- चंक: बिट डिप्टी (1 बाइट)

08 

7- हिस्सा: रंग प्रकार

02 

8- संपीड़न विधि

00 

9- फ़िल्टर विधि:

00 

10- जिल्द विधि:

00 

11- क्या निम्न डेटा है?

सी 6 25 एए 3E 00 00 00 सी 2

12-- IDAT

13- इस डेटा (IDAT के बाद) क्या है:

78 5 ई ईडी डी 4 81 06 सी 3 30 14 40 डी 1 बी 7 34 डीडी एफएफ एफएफ 6 एफ बी 3 74 56 ईए 89 12 6 सी 28 73 ई 2 एए 34 49 03 87 डी 6 एफई डी 8 7 बी 89 बीबी 52 8 डी 3 बी 87 एफई 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 डी 4 5 ई 6 ए 64 4 बी 94 एफ 5 98 7 सी डी 1 एफ 4 92 5 सी 5 सी 3 ई सीएफ 9 सी 3 एफ 73 71 58 5 एफ एएफ 8 बी 79 ​​5 बी ईई 96 बी 6 47 ईबी एफ 1 ईए डी 1 सीई बी 6 ई 3 75 3 बी ई 6 बी 9 95 8 डी सी 7 सीई 03 3 9 सी 9 एएफ सी 6 33 9 3 बी 66 37 सीएफ एबी बीएफ एफ 9 सी 9 2 एफ 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 डीबी 68 03 20 अमेरिकन प्लान प्रवर्तन निदेशालय 96 65 00 00 00 00

14- IEND:

49 45 4E 44

15- अंतिम 4 बाइट

AE 42 60 82 

इन क्या हैं?

क्या कुछ मुझे समझने में मदद कर सकते हैं, 11, 13 और 15 अंक ऊपर? और पिक्सेल मूल्य कहां हैं?

एक बार मैं इन विवरणों पता है, मैं अपने खुद के 16 बिट PNG चित्र उत्पन्न होगा: छवि (128 x 68 पिक्सल)

इन विवरणों को जानने का प्रयोजन हो रही है। मेरे पास पहले से ही पिक्सेल मान हैं, इसलिए मेरा काम हेडर इत्यादि पेश करना होगा।
मुझे नहीं पता कि सॉफ्टवेयर है जो इस काम को कर सकता है।

अद्यतन

मैं संपीड़न की वजह से अब समझते हैं, मैं पिक्सेल मान पता लगाने में सक्षम नहीं होगा।

मुझे यह विचार आया कि मैं ओपनसीवी में एक फाइल लिख सकता हूं और इसे पीएनजी के रूप में सहेज सकता हूं। खैर अब मेरा सीधा सवाल है: मेरे पास बाइनरी फ़ाइल है जिसमें ग्रे-स्केल 16 बिट-पिक्सेल मान हैं। क्या मैं इसे ओपनसीवी में 16 बिट पीएनजी के रूप में लिख सकता हूं?

उत्तर

3

हालांकि यह जानना दिलचस्प हो सकता है कि वास्तव में पीएनजी छवियां क्या हैं, और वास्तव में फ़ाइल में छवि का प्रतिनिधित्व कैसे किया जाता है, आपको पीएनजी फ़ाइल उत्पन्न करने के लिए इसे जानने की आवश्यकता नहीं है।

ध्यान दें कि पीएनजी लापरवाह संपीड़न का उपयोग करता है, जिसका अर्थ है कि आपको प्रति पिक्सेल दो बाइट नहीं मिलेगा।

आप अपनी छवि को एक प्रोग्राम में जेनरेट कर सकते हैं और पीएनजी प्रारूप में इसे कई पुस्तकालयों का उपयोग करके आउटपुट कर सकते हैं। उदाहरण के लिए, आप अपनी छवि को OpenCV में बना सकते हैं और फिर imWrite के साथ आउटपुट कर सकते हैं। पैरामीटर में से एक इसे पीएनजी में आउटपुट कर सकता है।


आप ग्रे पैमाने पर 16-बिट पिक्सेल मान है, तो आप उन्हें एक Mat में डाल सकते हैं। यह एक फाइल करने के लिए उत्पादन Converting cv::Mat to IplImage*

तो आप कर सकते हैं:

फिर एक IplImage है कि परिवर्तित।

+0

मैंने अभी संपीड़न के बारे में देखा है, इसलिए ठीक है मुझे सटीक पिक्सेल मान नहीं मिलेगा। लेकिन क्या आप मुझे 11 और 15 के बारे में बता सकते हैं? – gpuguy

+0

धन्यवाद, आपका उत्तर मेरे लिए बहुत उपयोगी है। मैं इसका परीक्षण करूंगा और फिर परिणाम पोस्ट करूंगा। – gpuguy

+3

+1 लेकिन मैं पूरी तरह से सहमत नहीं हूं "आपने अपना समय बर्बाद कर दिया"। पीएनजी के आंतरिक के बारे में सीखना आपके वर्तमान कार्य के लिए आवश्यक नहीं हो सकता है, लेकिन फिर भी यह सीख रहा है। – leonbloy

3

बस संपूर्णता के लिए (eboix के जवाब मौके पर ही सही है)

11- निम्न डेटा क्या है?

सी 6 25 एए 3E 00 00 00 सी 2

प्रत्येक हिस्सा एक CRC (4 बाइट्स) के साथ समाप्त होता है, और 4 बाइट कि इसकी लंबाई बताने के साथ शुरू होता है। तो, C6 25 AA 3E पिछले खंड (आईएचडीआर) का सीआरसी और 00 00 00 C2 (1 9 4) निम्न (आईडीएटी) खंड की लंबाई है।

इसी तरह, अंतिम 4 बाइट IEND खंड का सीआरसी है।

3

मैं भी ध्यान से लेकिन संरचना को देख से मुड़कर नहीं देखा ...

प्रश्न 11। सी 6 25 एए 3 ई = सीआरसी 32 00 00 00 सी 2 = अगले खंड का आकार

प्रश्न 13। पीएनजी स्पेक की जांच करें जिसे आपने पहले संदर्भित किया था जो आईडीएटी खंड की तरह दिखता है, आप इसे पहले ही संपीड़न के बारे में जानते हैं!

Q15। एई 42 60 82 = सीआरसी 32

संबंधित मुद्दे