আমি কীভাবে একটি চিত্রায়িত (এবং প্রদর্শন) একটি নমপি অ্যারে রূপান্তর করব?


227

আমি এইভাবে একটি অ্যারে তৈরি করেছি:

import numpy as np
data = np.zeros( (512,512,3), dtype=np.uint8)
data[256,256] = [255,0,0]

আমি যা করতে চাই তা হ'ল 512x512 চিত্রের কেন্দ্রে একটি লাল বিন্দু প্রদর্শন করা। (কমপক্ষে শুরু করার জন্য ... আমি মনে করি আমি সেখান থেকে বাকীগুলি বের করতে পারি)


1
এছাড়াও স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 902761/… দেখুন, যদিও এটি পিআইএল ব্যবহার করা যাবে না এমন প্রতিবন্ধকতা চাপিয়ে দিয়েছে।
পিটার হানসেন

আপনি কি পিটারের গ্রহণযোগ্য উত্তর পরিবর্তন করতে পারেন ? এটি উভয়ই নমপি অ্যারের চারপাশে কোনও বস্তুকে আবৃত করার প্রয়োজনীয়তা এড়িয়ে যায় এবং চিত্রটি প্রদর্শনের জন্য একটি টেম্পল ফাইল লেখা এড়ানো যায়।
জোশিয়াহ

উত্তর:


223

আপনি একটি চিত্র তৈরি করতে (এবং প্রদর্শন করতে) পিআইএল ব্যবহার করতে পারেন:

from PIL import Image
import numpy as np

w, h = 512, 512
data = np.zeros((h, w, 3), dtype=np.uint8)
data[0:256, 0:256] = [255, 0, 0] # red patch in upper left
img = Image.fromarray(data, 'RGB')
img.save('my.png')
img.show()

3
মনে হচ্ছে একটি বাগ আছে। আপনি আকারের সাথে অ্যারে তৈরি করেন (w,h,3)তবে এটি হওয়া উচিত (h,w,3), কারণ পিআইএল-তে সূচীকরণটি আঙ্কে তালিকাবদ্ধকরণের চেয়ে পৃথক। আছে: সংশ্লিষ্ট প্রশ্ন হল stackoverflow.com/questions/33725237/...
fdermishin

1
@ ব্যবহারকারী 502144: আমার ত্রুটি চিহ্নিত করার জন্য ধন্যবাদ। আমার আকৃতির একটি অ্যারে তৈরি করা উচিত ছিল (h,w,3)। (এটি এখন উপরে, উপরে ঠিক করা হয়েছে) প্রথম অক্ষের দৈর্ঘ্যটিকে অ্যারের সারিগুলির সংখ্যা এবং দ্বিতীয় অক্ষের দৈর্ঘ্য, কলামের সংখ্যা হিসাবে ভাবা যেতে পারে। সুতরাং (h, w)"উচ্চতা" hএবং "প্রস্থ" এর অ্যারের সাথে মিলে যায় wImage.fromarrayএই অ্যারেটিকে উচ্চতা hএবং প্রস্থের ছবিতে রূপান্তরিত করে w
unutbu

1
img.show()আইপথন নোটবুকে কাজ করবেন না img_pil = Image.fromarray(img, 'RGB') display(img_pil.resize((256,256), PIL.Image.LANCZOS))
mrgloom

@unutbu এই পদ্ধতি Distort ইমেজ ... মনে হয় stackoverflow.com/questions/62293077/...
Ludovico Verniani

284

নিম্নলিখিত কাজ করা উচিত:

from matplotlib import pyplot as plt
plt.imshow(data, interpolation='nearest')
plt.show()

আপনি যদি জপিটার নোটবুক / ল্যাব ব্যবহার করছেন তবে ম্যাটপ্ল্লোলিব আমদানির আগে এই ইনলাইন কমান্ডটি ব্যবহার করুন:

%matplotlib inline 

3
এটি পিআইএল এর চেয়ে আরও সঠিক। পিআইএল অ্যারে মানগুলি পুনরায় বিক্রয় / স্বাভাবিক করে তোলে, যেখানে পাইপলট প্রকৃত আরজিবি মানগুলি যেমন হয় তেমন ব্যবহার করে।
গ্যারিও

20
সম্ভবত জেনে রাখা ভাল: আপনি যদি গ্রেস্কেল চিত্রগুলি প্রদর্শন করতে চান তবে plt.gray()নিম্নলিখিত কোডটি গ্রাসকেলে স্যুইচ করার জন্য আপনার কোডে একবার কল করার পরামর্শ দেওয়া হচ্ছে । ওপি যা চায় তা নয় তবে তবুও জেনে রাখা ভাল।
Cerno

2
কীভাবে এটি সংরক্ষণ করবেন?
ব্যবহারকারী334639

ফাইল "<ipython-input-29-29c784f62838>", লাইন 39 plt.show () nt সিনট্যাক্স এরর: অবৈধ সিনট্যাক্স
মোনা জালাল

1
@ কার্নো এছাড়াও, গ্রেস্কেল চিত্রগুলির আকার (এইচ, ডাব্লু) এর পরিবর্তে (এইচ, ডাব্লু, ১) হওয়া উচিত। আপনি squeeze()তৃতীয় মাত্রাটি অপসারণ করতে ব্যবহার করতে পারেন :plt.imshow(data.squeeze())
জোশিয়াহ যোডার

51

সবচেয়ে সংক্ষিপ্ত পথটি ব্যবহার করা যেমন scipy:

from scipy.misc import toimage
toimage(data).show()

এর জন্য পিআইএল বা বালিশও ইনস্টল করা দরকার।

অনুরূপ পদ্ধতির জন্য পিআইএল বা বালিশের প্রয়োজন হয় তবে এটি ভিন্ন দর্শকের কাছে আবেদন করতে পারে :

from scipy.misc import imshow
imshow(data)

তাহলে এই পদ্ধতিটি অজগর 3.5 এর সাথে বেমানান ...?
ক্রিস্টোফার

@ বোর্ডো, কেন এটি 3.5 এর সাথে সামঞ্জস্য নয়? এটি কেবল একটি আমদানি এবং কয়েকটি ফাংশন কল।
পিটার হ্যানসেন

পিআইএল 3.5 এর সাথে বেমানান (ইনস্টল করবে না)
ক্রিস্টোফার

1
Ftr: আপনি সরাসরি ব্যবহার করে এটি আরও সংক্ষিপ্ত করতে পারেন scipy.misc.imshow(data)
dtk

3
toimageস্কিপি -১.০. এ অবমূল্যায়ন করা হয়েছিল এবং বালিশের পক্ষে, ১.২.০ এ অপসারণ করা হয়েছিল Image.fromarray
সিড

4

পাইগাম ব্যবহার করে , আপনি একটি উইন্ডো খুলতে পারবেন, পৃষ্ঠটিকে পিক্সেলের একটি অ্যারে হিসাবে পেতে পারেন এবং সেখান থেকে আপনি যেমন চান তেমন পরিচালনা করতে পারেন। আপনার আপনার আকাঙ্ক্ষিত অ্যারেটিকে পৃষ্ঠের অ্যারেতে অনুলিপি করতে হবে, তবে এটি পিগাম পৃষ্ঠের প্রকৃত গ্রাফিক্স অপারেশন করার চেয়ে ধীর হবে।


3

উদাহরণস্বরূপ নমপি অ্যারেতে সজ্জিত চিত্রগুলি কীভাবে দেখানো যায় (বৃহস্পতি নোটবুকে কাজ করে)

আমি জানি যে আরও সহজ উত্তর রয়েছে তবে এইটি আপনাকে বুঝতে দেয় যে চিত্রগুলি কীভাবে প্রকৃতির বিন্যাস থেকে ডুবে যায়।

লোড উদাহরণ

from sklearn.datasets import load_digits
digits = load_digits()
digits.images.shape   #this will give you (1797, 8, 8). 1797 images, each 8 x 8 in size

একটি চিত্রের অ্যারে প্রদর্শন করুন

digits.images[0]
array([[ 0.,  0.,  5., 13.,  9.,  1.,  0.,  0.],
       [ 0.,  0., 13., 15., 10., 15.,  5.,  0.],
       [ 0.,  3., 15.,  2.,  0., 11.,  8.,  0.],
       [ 0.,  4., 12.,  0.,  0.,  8.,  8.,  0.],
       [ 0.,  5.,  8.,  0.,  0.,  9.,  8.,  0.],
       [ 0.,  4., 11.,  0.,  1., 12.,  7.,  0.],
       [ 0.,  2., 14.,  5., 10., 12.,  0.,  0.],
       [ 0.,  0.,  6., 13., 10.,  0.,  0.,  0.]])

100 টি চিত্র দেখার জন্য খালি 10 x 10 সাব-প্লট তৈরি করুন

import matplotlib.pyplot as plt
fig, axes = plt.subplots(10,10, figsize=(8,8))

প্লটিং 100 ইমেজ

for i,ax in enumerate(axes.flat):
    ax.imshow(digits.images[i])

ফলাফল:

এখানে চিত্র বর্ণনা লিখুন

কি করে axes.flat? এটি অদ্ভুত গণক তৈরি করে যাতে আপনি তাদের উপর বস্তুর আঁকতে অক্ষের উপর দিয়ে পুনরাবৃত্তি করতে পারেন। উদাহরণ:

import numpy as np
x = np.arange(6).reshape(2,3)
x.flat
for item in (x.flat):
    print (item, end=' ')

2

বালিশের ফ্রোমারে ব্যবহার করা, উদাহরণস্বরূপ:

from PIL import Image
from numpy import *

im = array(Image.open('image.jpg'))
Image.fromarray(im).show()

1

পাইথন ইমেজিং লাইব্রেরী Numpy অ্যারে ব্যবহার করে ছবি প্রদর্শন করতে পারেন। নমুনা কোডের জন্য এই পৃষ্ঠাটি একবার দেখুন:

সম্পাদনা: এই পৃষ্ঠার নীচের নোটটি যেমন বলেছে, আপনার সর্বশেষ রিলিজ নোটগুলি পরীক্ষা করা উচিত যা এটিকে আরও সহজ করে তোলে:

http://effbot.org/zone/pil-changes-116.htm


এটি প্রশ্নের উত্তর দেয় না
জন কেটজিক

0

Matplotlib দিয়ে এটি করার জন্য পরিপূরক। আমি এটি কম্পিউটার দর্শনের কাজগুলি খুব সহজেই করতে পেলাম। ধরা যাক আপনি dtype = int32 সহ ডেটা পেয়েছেন

from matplotlib import pyplot as plot
import numpy as np

fig = plot.figure()
ax = fig.add_subplot(1, 1, 1)
# make sure your data is in H W C, otherwise you can change it by
# data = data.transpose((_, _, _))
data = np.zeros((512,512,3), dtype=np.int32)
data[256,256] = [255,0,0]
ax.imshow(data.astype(np.uint8))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.