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

كيفية رسم مستطيل على الصورة باستخدام Matplotlib في بايثون

Ali Ismael

السؤال

Recommended Posts

  • 1

يمكنك استخدام الدالة Rectangle من الوحدة patches لإضافة حقل يمثل مستطيل:

matplotlib.pyplot.patches.Rectangle(xy, width, height, angle=0.0, **kwargs)

xy: النقطة اليسرى السفلية لبدء رسم المستطيل.  width: عرض المستطيل. height: ارتفاع المستطيل. angle: زاوية دوران المستطيل. مثال:

import matplotlib.patches as patches
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
# قراءة الصورة
im = Image.open('/content/test.jpg')
# تحويل الصورة إلى مصفوفة
im = np.array(im, dtype=np.uint8)
plt.imshow(im)
# axes و  figure  تعريف  
fig, axs = plt.subplots(1)
axs.imshow(x)
# إنشاء مستطيل
rectangle =patches.Rectangle((317, 60), 200, 100, linewidth=1, edgecolor='r', facecolor='None')
# إضافة ال المستطيل
axs.add_patch(rectangle)
# عرض
plt.show()

الوسيط edgecolor يتحكم بلون حدود المستطيل والوسيط facecolor يتحكم بلونه. والوسيط linewidth يتحكم بسماكة الحدود. والدالة add_patch نستخدمها لإضافة الشكل (الذي يمثل المستطيل) إلى الصورة الموجودة ضمن ال axes.
النتيجة:
index.png.93c160e8ab945a2861481e02c46063ee.png
index1.png.97c757140e9ab7b76f5eb9ecb974bd8f.png

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

  • 1

بجانب استخدام matplotlib.pyplot.patches.Rectangle لوضع مستطيل في مكان معين، يمكن استخدامها كذلك لرسم مستطيل على مكان يتم تحديده بشكل تلقائي اذا كان هناك نموذج تم التعلم عليه مسبقا كالتالي:
 

#تحميل النموذج
train_images = get_image_files(root/"train")
fig, ax = plt.subplots()
#اختيار صورة
path_img = train_images[0]
img = cv2.imread(str(path_img))
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)

def get_target_ds(name, df):
  rows = df[df["name"] == name[:-4]]
  return rows["class"].values, rows[bboxes_cols].values
bboxes_cols = ["center_x", "center_y", "width", "height"]
labels, boxes = get_target_ds(path_img.name, train_df)
x = (boxes[0][0] - boxes[0][2]*0.5)*img.shape[1]
y = (boxes[0][1] - boxes[0][3]*0.5)*img.shape[0]
w = boxes[0][2] * img.shape[1]
h = boxes[0][3] * img.shape[0]

#عرض الصورة
fig, ax = plt.subplots(figsize = (6,9))
ax.xaxis.tick_top()
ax.imshow(img)
#رسم مستطيل بشكل تلقائي
ax.add_patch(patches.Rectangle((x,y),w,h, fill=False, edgecolor='red', lw=2))

النتيجة:

1_a58g4_lzCFo3XIrq4avVoA.png.ff20cb09add808431957ae919e0dcf07.png

لاحظ اننا لم نحدد مكان المستطيل على الرسمة وانما تم اختيارها بناء على تعليم النموذج من قبل.

ذلك الاستخدام مهم للغاية في مجالات object detection أو تحديد الأشياء وغيرها.

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...