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

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

Amer Abdallah

السؤال

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

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

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

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

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

Recommended Posts

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

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

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...