البرمجة

تحويل رسوم بيانية Matplotlib إلى مصفوفة NumPy بدون حفظ على القرص

في مجال توليد الصور باستخدام Matplotlib وتحويلها إلى مصفوفة NumPy، يمكنك تحسين العملية بطرق أخرى دون الحاجة إلى حفظ الصورة على ملف وثم قراءتها مرة أخرى. يمكن أن يكون لديك حلاً أفضل باستخدام وحدة io من مكتبة NumPy لتحويل الصورة مباشرة إلى مصفوفة. إليك كيفية تحسين الكود:

python
import numpy as np import matplotlib.pyplot as plt from io import BytesIO from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas from matplotlib.figure import Figure # إعداد الشكل والرسم عليه fig = Figure() canvas = FigureCanvas(fig) ax = fig.gca() ax.text(0.0, 0.0, "Test", fontsize=45) ax.axis('off') # تحويل الشكل إلى مصفوفة NumPy مباشرة buf = BytesIO() canvas.print_png(buf) buf.seek(0) image = plt.imread(buf) # يمكنك الآن استخدام مصفوفة 'image' كمصفوفة NumPy # على سبيل المثال، يمكنك طباعتها أو استخدامها في عمليات أخرى print(image) # أيضا، يمكنك عرض الصورة باستخدام plt.imshow إذا أردت plt.imshow(image) plt.show()

بهذه الطريقة، يتم تجنب حفظ الصورة على القرص الصلب وقراءتها مرة أخرى، بل يتم تحويل الصورة مباشرة إلى مصفوفة NumPy باستخدام BytesIO. يمكنك استخدام مصفوفة image بسهولة في العمليات اللاحقة دون الحاجة إلى ملف وسيط.

المزيد من المعلومات

في عملية تحويل الرسم البياني من Matplotlib إلى مصفوفة NumPy، يمكن أن تكون هناك بعض النقاط المهمة لفهمها وتوسيع فهمك حول هذا الموضوع.

أولاً وقبل كل شيء، دعنا نفهم الخطوة التي قمت بها في الكود المقدم:

python
buf = BytesIO() canvas.print_png(buf) buf.seek(0) image = plt.imread(buf)
  1. BytesIO() تستخدم لإنشاء كائن لتخزين البيانات كما لو كانت ملفًا بايت.
  2. canvas.print_png(buf) تقوم بطباعة الشكل (figure) على buf باستخدام تنسيق PNG.
  3. buf.seek(0) تعيد مؤشر القراءة/الكتابة في buf إلى البداية، مما يتيح لك قراءة البيانات من البداية.
  4. plt.imread(buf) تقوم بقراءة البيانات من buf كصورة.

الآن، بما أن لديك مصفوفة NumPy (image)، يمكنك استخدامها بالطرق التي تحلو لك. يمكنك، على سبيل المثال، استخدام مكتبة OpenCV لتحليل الصورة، أو تحويلها إلى رمز لوني آخر، أو حتى إجراء عمليات معينة عليها.

لاحظ أنه يمكنك تخصيص شكل الرسم التوضيحي (Matplotlib figure) قبل طباعته إلى الـ BytesIO، مما يتيح لك إضافة المزيد من العناصر أو تغيير الخصائص حسب احتياجاتك.

هذه العملية تكون فعالة لتحويل الرسوم البيانية الصغيرة والبسيطة. ومع ذلك، إذا كنت تعمل مع رسوم بيانية كبيرة أو معقدة، قد تواجه بعض التحديات الأدائية. في هذه الحالة، يمكن أن تكون هناك حاجة للنظر في حلول أكثر تقدمًا.

زر الذهاب إلى الأعلى