हैलो, मैं पाइथन का उपयोग करके स्कूल प्रोजेक्ट करने की कोशिश कर रहा हूं और मैं फंस रहा हूं इसलिए मुझे कुछ मदद चाहिए। मैं एक छवि आयात करने और इसे पढ़ने और हेक्साडेमिकल्स में एक टेक्स्ट फ़ाइल निर्यात करने की कोशिश कर रहा हूं।

उदाहरण के लिए इस छवि के साथ मैंने एमएस पेंट के साथ बनाया थायहां छवि विवरण दर्ज करें

मान लें कि यह 9 पिक्सेल की छवि है। मैं इस छवि को आयात करना चाहता हूं और इसे एक टेक्स्ट फ़ाइल में बदलना चाहता हूं जो कुछ इस तरह पढ़ती है:

FF0000 0000FF 00FF00
0000FF FF0000 00FF00
00FF00 FF0000 0000FF

क्या यह पायथन का उपयोग करना संभव होगा? या क्या मुझे इसे करने के लिए किसी अन्य प्रोग्रामिंग भाषा की आवश्यकता है? अग्रिम धन्यवाद दोस्तों!(क्षमा करें अगर मेरी अंग्रेजी खराब है)

0
James Lee 28 मार्च 2018, 11:37

3 जवाब

सबसे बढ़िया उत्तर

मैं वास्तव में पायथन नहीं बोलता, लेकिन मैंने कुछ सीखने की कोशिश की है और ऐसा लगता है कि आप जो पूछते हैं वह करते हैं। मैं बहुत पाइथोनिक नहीं हो सकता, लेकिन कम से कम यह केवल पीआईएल का उपयोग करता है, जो ओपनसीवी की तुलना में बहुत छोटा और स्थापित करने में आसान है!

#!/usr/local/bin/python3
import sys
from PIL import Image

# Check image supplied as argument
if len(sys.argv)!=2:
    sys.exit("ERROR: Please specify a file")

# Load image
img=Image.open(sys.argv[1])

# Retrieve dimensions
w,h=img.size

# Make RGB if palettised
if img.mode=="P":
    img=img.convert('RGB')

p=img.load()
for y in range(0,h):
    for x in range(0,w):
        r,g,b=p[x,y]
        str="%02x%02x%02x "%(r,g,b)
        print(str,end='')
    print()
2
Mark Setchell 28 मार्च 2018, 17:47

Opencv छवि को आसानी से पढ़ सकता है।

import cv2

img = cv2.imread('image.png')
print(img.shape)

cy=img.shape[0]
cx=img.shape[1]
f = open('img.txt', 'w')
for row in img:
    for col in row:
        str="%02x%02x%02x"%(col[0], col[1], col[2])
        f.write(str)
f.close()
1
Junhee Shin 28 मार्च 2018, 08:50

आप इसे ImageMagick का उपयोग करके, Python की आवश्यकता के बिना कमांड-लाइन पर कर सकते हैं, जो कि अधिकांश Linux डिस्ट्रो पर स्थापित है और macOS और Windows के लिए उपलब्ध है।

यह पीएनजी, जेपीईजी और लगभग 200 अन्य छवि प्रकारों के लिए काम करेगा। आइए एक नमूना छवि बनाएं:

convert xc:red  xc:blue xc:lime +append    \
     \( xc:blue xc:red  xc:lime +append \) \
     \( xc:lime xc:red  xc:blue +append \) \
     -append start.png

और चलिए इसे बड़ा करते हैं ताकि आप इसे देख सकें (मैं इसे एक बार में कर सकता था):

convert start.png -scale 400x start.png

enter image description here

अब आपके प्रश्न के लिए, मैं इसे कच्चे आरजीबी में परिवर्तित कर सकता हूं (सभी छवि आकार, पैलेट, संपीड़न, और शीर्षलेखों की व्याख्या करके) और हेक्स स्वरूपण के लिए xxd के माध्यम से पास कर सकता हूं:

convert start.png -depth 8 rgb: | xxd -g3 -c9 -u
00000000: FF0000 0000FF 00FF00  .........
00000009: 0000FF FF0000 00FF00  .........
00000012: 00FF00 FF0000 0000FF  .........

यदि आप सामने से पता और अंत से बिंदुओं को हटाना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

convert start.png -depth 8 rgb: | xxd -g3 -c9 -u | sed 's/  .*//; s/^.*: //'
FF0000 0000FF 00FF00
0000FF FF0000 00FF00
00FF00 FF0000 0000FF

sed कमांड कहता है... "जहां भी आप दो रिक्त स्थान देखते हैं, उन्हें हटा दें और जो कुछ भी आगे आता है उसे हटा दें। एक कोलन तक और उसके बाद एक स्पेस सहित कुछ भी हटा दें।"

या शायद सादा डंप बेहतर है:

convert start.png -depth 8 rgb: | xxd -g3 -c9 -u -p
FF00000000FF00FF00
0000FFFF000000FF00
00FF00FF00000000FF

नोट: यदि ImageMagick v7+ का उपयोग कर रहे हैं, तो ऊपर दिए गए सभी उदाहरणों में convert को magick से बदलें।

2
Mark Setchell 28 मार्च 2018, 10:40