اذهب إلى المحتوى
  • 0

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

Fahmy Mostafa

السؤال

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

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

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

Recommended Posts

  • 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
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 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')

 

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...