• 0

مشكلة في تحويل صورة من نوع RGB إلى مصفوفة Numpy

لدي صورة RGB. أريد تحويله إلى مصفوفة Numpy. لذلك قمت بكتابة الكود التالي:

img = cv.LoadImage("image.tiff")
arr = np.asarray(img)

لكن هذا الكود يقوم بصنع مصفوفة بلا شكل shape. وإعتقد أنه كائن من نوع iplimage.

كيف يمكنني تحويل هذه الصورة إلى مصفوفة Numpy لكي أقوم بإجراء بعض العمليات عليها؟

2 اشخاص أعجبوا بهذا

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


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

يمكنك استخدام ال  OpenCV  الأحدث كالتالي

import cv2
im = cv2.imread("abc.tiff",mode='RGB')
print type(im)

والنتيجة تكون كالتالي

<type 'numpy.ndarray'>

كما يمكنك أيضاً استخدام المكتبة PIL (Python Imaging Library) لاحظ المثال التالي حيث تم تعريف دالتين لحفظ وتحميل الصورة كمصفوفة

from PIL import Image
import numpy as np

def load_image( infilename ) :
    img = Image.open( infilename )
    img.load()
    data = np.asarray( img, dtype="int32" )
    return data

def save_image( npdata, outfilename ) :
    img = Image.fromarray( np.asarray( np.clip(npdata,0,255), dtype="uint8"), "L" )
    img.save( outfilename )

 

تمّ تعديل بواسطة عبدالباسط ابراهيم
إضافة بعض المعلومات

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


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

حسناً هناك عدة طرق، لكن يجب علينا أن نفرق بين قراءة الصورة وتحويلها إلى مصفوفة نمباي، الآن أول طريقة هي استخدام الدالة asarray بعد قراءة المصفوفة باستخدام مكتبة PIL لكن أولاً يجب تثبيتها:

pip install Pillow

الآن يمكنك استخدام PIL:

from PIL import Image
import requests
#url ٍسأقرأ صورة من عنوان 
im = Image.open(requests.get(url, stream=True).raw)
# طباعة معلومات الصورة
print(im.format)
print(im.size)
print(im.mode)
"""
JPEG
(1920, 1200)
RGB
"""
# الآن تحويلها لمصفوفة نمباي
numpydata = np.asarray(im)
# <class 'numpy.ndarray'>
print(type(numpydata))
#  shape: (1200, 1920, 3)
print(numpydata.shape)

الطريقة الثانية استخدام numpy.array بنفس الطريقة:

from PIL import Image
import requests
#url ٍسأقرأ صورة من عنوان 
im = Image.open(requests.get(url, stream=True).raw)
# طباعة معلومات الصورة
print(im.format)
print(im.size)
print(im.mode)
"""
JPEG
(1920, 1200)
RGB
"""
numpy_Arr = np.array(im)
# <class 'numpy.ndarray'>
print(type(numpy_Arr))
#  shape: (1200, 1920, 3)
print(numpy_Arr.shape)
# ولاستعادة الصورة لشكلها الأصلي
# Image.fromarray
Image.fromarray(numpy_Arr)

الطريقة الثالثة هي استخدام الدالة img_to_array من keras حيث نقوم في البداية بقراءتها من خلال الدالة load_img من كيراس أيضاً:

# pip install keras
# pip install tensorflow
from keras.preprocessing.image import load_img
mg = load_img('image1.png') 
im.mode # RGB
type(mg) # <class 'PIL.PngImagePlugin.PngImageFile'>
im.format # PNG
im.size # (400, 200)
# الآن تحويلها
from keras.preprocessing.image import img_to_array
numpy_array = img_to_array(img
numpy_array.shape
# (200, 400, 3) 
type(numpy_array)
# <class 'numpy.ndarray'>
numpy_array.dtype
# type: float32  
# ولاستعادة الصورة من مصفوفة نمباي
from keras.preprocessing.image import array_to_img
array_to_img(numpy_array)            

وأيضاً من خلال مكتبة OpenCV لكن أيضاً يجب تحميلها:

# pip install opencv-contrib-python
import cv2 as cv
im = cv.imread('Sample.png')
image = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
# لحفظها
cv.imwrite('i.png', image)
type(img) # <class 'numpy.ndarray'>

حيث تقوم بقراءة الصورة كمصفوفة نمباي مباشرةً. وهذا كان كل شيئ.

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


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

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

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

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


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

تسجيل الدخول

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


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