• 0

حفظ مصفوفة Numpy كصورة

أعرف ان الصورة عبارة عن مصفوفة كبيرة من القيم التي تعبر عن لون كل بيكسل Pixel، ولدي مصفوفة Numpy تحتوي على قيم تعبر عن ألوان كل بيكسل في الصورة. كيف يمكنني إستخراجها في شكل صورة؟ بأي تنسيق (png ، jpeg ، bmp ...). 

هل توجد مكتبة جاهزة تقوم بهذا الأمر؟

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

يمكنك القيام بذلك بالشكل التالي من خلال scipy:

import scipy.misc
scipy.misc.imsave('outfile.jpg', image_array)

أو من خلال مكتبة PIL :

from PIL import Image
im = Image.fromarray(A)
im.save("your_file.jpeg")

أو من خلال مكتبة matplotlib :

import matplotlib
matplotlib.image.imsave('name.png', array)

ومن خلال مكتبة png لكن قم أولاً بتحميل المكتبات :

# pip install pypng
# python setup.py install
import png
png.from_array([[255, 255, 122, 255],
                [0, 255, 255, 0]], 'L').save("im.png")

أو من خلال مكتبة opencv:

import cv2
img = ... # مصفوفتك
cv2.imwrite("filename.png", img) # المسار والصورة

 

تمّ تعديل بواسطة Ali Haidar Ahmad
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

يمكنك استخدام الدالة fromarray () لإنشاء ذاكرة صورة من كائن يقوم بتصدير المصفوفة. يمكننا بعد ذلك حفظ ذاكرة الصورة هذه في الموقع المطلوب من خلال توفير المسار المطلوب واسم الملف كالتالي

import numpy as np
from PIL import Image

array = np.arange(0, 737280, 1, np.uint8)
array = np.reshape(array, (1024, 720))

im = Image.fromarray(array)
im.save("filename.jpeg")

نقوم أولا بإنشاء مصفوفة تخزن رموز ألوان RGB ثم نقوم بتصديرها. يمكننا تحديد التنسيق المطلوب لصورتنا في اسم الملف. يمكن أن يكون هذا بتنسيق jpeg أو png أو أي تنسيق صورة آخر شائع الاستخدام. يمكنك أيضا استخدم الدالة imageio.imwrite () لحفظ مصفوفة Numpy كصورة كالتالي

import imageio
import numpy as np

array = np.arange(0, 737280, 1, np.uint8)
array = np.reshape(array, (1024, 720))

imageio.imwrite('filename.jpeg', array)

ومن الممكن استخدام الدالة matplotlib.pyplot.imsave () لحفظ مصفوفة Numpy كصورة, حيث وحدة matplotlib تحتوي على مجموعة متنوعة من الوظائف المتاحة للعمل مع الصور, على سبيل المثال

import matplotlib.pyplot as plt
import numpy as np

array = np.arange(0, 737280, 1, np.uint8)
array = np.reshape(array, (1024, 720))

plt.imsave('filename.jpeg', array)

وأيضا غالبا ما تستخدم وحدة OpenCV لمعالجة الصور في Python. يمكن للدالة imwrite () من هذه الوحدة تصدير مصفوفة عددية كملف صورة كالتالي

import cv2   
import numpy as np

array = np.arange(0, 737280, 1, np.uint8)
array = np.reshape(array, (1024, 720))

cv2.imwrite('filename.jpeg', array)

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

هناك الكثير من المكتبات التي تسمح بتحويل الصور الي بيكسل وكذلك تحويل البيكسل الي صور، وتسمح كذلك باستقبالها سواء الوان RGB  او ابيض واسود grey.

أشهر المكتبات للتعامل مع الصور:

  • opencv

نستطيع باستخدامها ان نقوم اما بقراءه الصور كالتالي:

# Python code to read image
import cv2
 

img = cv2.imread("example.png", cv2.IMREAD_COLOR)
 
cv2.imshow("Cute Kitens", img)
 
cv2.waitKey(0)

cv2.destroyAllWindows()

ويمكن تبديل cv2.IMREAD_COLOR ب 0 في حالة أردنا قرائتها بالابيض والاسود.

أما عن حفظ الصور فيمكن استخدامها كالتالي:

 
# importing cv2
import cv2
 
# path
path = r'example.png'
 
# Using cv2.imread() method
# Using 0 to read image in grayscale mode
img = cv2.imread(path, 0)
 
# Displaying the image
cv2.imshow('image', img)

مكتبة PIL

يمكن استخدامها من أجل قراءة وكتابة الصور كالتالي:

from PIL import Image 
import PIL 
  
# creating a image object (main image) 
im1 = Image.open(r"C:\Users\System-Pc\Desktop\flower1.jpg") 
  
# save a image using extension
im1 = im1.save("example.jpg")

 

تمّ تعديل بواسطة Ahmed Sharshar

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

توجد العديد من المكتبات الجتهزة لعمل المطلوب وربما تجد لكل مكتبة مميزات عن غيرها وكما في التعليقات السابقة يمكنك البحث لتجد المكتبة المناسبة لكل وإضافة يمكنك استخدام المكتبة skimage بسهولة كالتالي

from skimage.io import imsave
imsave('Path_to_your_folder/File_name.jpg',your_array)

أو يمكنك استخدام حل آخر بدون استدعاء أي مكتبة كالتالي

def saveAsPNG(array, filename):
    import struct
    if any([len(row) != len(array[0]) for row in array]):
        raise ValueError, "المصفوفة يجب أن تحتوي عناصر من نفس الحجم"

                                
    flat = []; map(flat.extend, reversed(array))
                                 
    buf = b''.join([struct.pack('>I', ((0xffFFff & i32)<<8)|(i32>>24) )
                    for i32 in flat])   

    data = write_png(buf, len(array[0]), len(array))
    f = open(filename, 'wb')
    f.write(data)
    f.close()

ويمكنك استخدام هذه الدالة كالتالي

saveAsPNG([[0xffFF0000, 0xffFFFF00],
           [0xff00aa77, 0xff333333]], 'test_image.png')

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن