الحصول على حجم الصورة (العرض والارتفاع) باستخدام Python و OpenCV و Pillow (PIL)

اعمال

يوجد في Python العديد من المكتبات للتعامل مع الصور ، مثل OpenCV و Pillow (PIL). يشرح هذا القسم كيفية الحصول على حجم الصورة (العرض والارتفاع) لكل منهم.

يمكنك الحصول على حجم الصورة (العرض والارتفاع) كصفقة باستخدام الشكل لـ OpenCV وحجم الوسادة (PIL) ، لكن لاحظ أن ترتيب كل منهما مختلف.

يتم توفير المعلومات التالية هنا.

  • OpenCV
    • ndarray.shape:الحصول على حجم الصورة (العرض والارتفاع)
      • للصور الملونة
      • للصور ذات التدرج الرمادي (أحادية اللون)
  • Pillow(PIL)
    • sizeوwidthوheight:الحصول على حجم الصورة (العرض والارتفاع)

راجع المقالة التالية حول كيفية الحصول على حجم (سعة) ملف بدلاً من حجم الصورة (الحجم).

OpenCV:ndarray.shape:الحصول على حجم الصورة (العرض والارتفاع)

عند تحميل ملف صورة في OpenCV ، يتم التعامل معه على أنه مصفوفة NumPy ndarray ، ويمكن الحصول على حجم الصورة (العرض والارتفاع) من شكل السمة ، مما يشير إلى شكل ndarray.

ليس فقط في OpenCV ، ولكن أيضًا عند تحميل ملف صورة في وسادة وتحويله إلى ndarray ، يتم الحصول على حجم الصورة التي يمثلها ndarray باستخدام الشكل.

للصور الملونة

في حالة الصور الملونة ، يتم استخدام ndarray ثلاثي الأبعاد التالي.

  • صف (ارتفاع)
  • الصف (العرض)
  • اللون (3)

الشكل عبارة عن مجموعة من العناصر أعلاه.

import cv2

im = cv2.imread('data/src/lena.jpg')

print(type(im))
# <class 'numpy.ndarray'>

print(im.shape)
print(type(im.shape))
# (225, 400, 3)
# <class 'tuple'>

لتعيين كل قيمة إلى متغير ، قم بفك حزمة tuple على النحو التالي.

h, w, c = im.shape
print('width:  ', w)
print('height: ', h)
print('channel:', c)
# width:   400
# height:  225
# channel: 3

_
عند تفريغ مجموعة ، قد يتم تعيين ما سبق بشكل تقليدي كمتغير للقيم التي لن يتم استخدامها بعد ذلك. على سبيل المثال ، إذا لم يتم استخدام عدد الألوان (عدد القنوات) ، فسيتم استخدام ما يلي.

h, w, _ = im.shape
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

يمكن استخدامه أيضًا كما هو عن طريق تحديده بالفهرس (الفهرس) دون تعيينه إلى متغير.

print('width: ', im.shape[1])
print('height:', im.shape[0])
# width:  400
# height: 225

(width, height)
إذا كنت ترغب في الحصول على هذه المجموعة ، يمكنك استخدام شريحة وكتابة ما يلي: cv2.resize () ، إلخ. إذا كنت تريد تحديد الوسيطة حسب الحجم ، فاستخدم هذا.

print(im.shape[1::-1])
# (400, 225)

للصور ذات التدرج الرمادي (أحادية اللون)

في حالة الصور ذات التدرج الرمادي (أحادية اللون) ، يتم استخدام ndarray ثنائي الأبعاد التالي.

  • صف (ارتفاع)
  • الصف (العرض)

سيكون الشكل هذا tuple.

im_gray = cv2.imread('data/src/lena.jpg', cv2.IMREAD_GRAYSCALE)

print(im_gray.shape)
print(type(im_gray.shape))
# (225, 400)
# <class 'tuple'>

في الأساس نفس الشيء بالنسبة للصور الملونة.

h, w = im_gray.shape
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

print('width: ', im_gray.shape[1])
print('height:', im_gray.shape[0])
# width:  400
# height: 225

إذا كنت تريد تعيين العرض والارتفاع للمتغيرات ، فيمكنك القيام بذلك على النحو التالي ، سواء كانت الصورة ملونة أو ذات تدرج رمادي.

h, w = im.shape[0], im.shape[1]
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

(width, height)
إذا كنت ترغب في الحصول على هذه المجموعة ، يمكنك استخدام الشرائح وكتابتها على النحو التالي. يمكن استخدام نمط الكتابة التالي سواء كانت الصورة ملونة أو بتدرج الرمادي.

print(im_gray.shape[::-1])
print(im_gray.shape[1::-1])
# (400, 225)
# (400, 225)

Pillow(PIL):size, width, height:الحصول على حجم الصورة (العرض والارتفاع)

كائن الصورة الذي تم الحصول عليه من خلال قراءة صورة مع وسادة (PIL) له السمات التالية.

  • size
  • width
  • height

الحجم هو المجموعة التالية.
(width, height)

from PIL import Image

im = Image.open('data/src/lena.jpg')

print(im.size)
print(type(im.size))
# (400, 225)
# <class 'tuple'>

w, h = im.size
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

يمكنك أيضًا الحصول على العرض والارتفاع على التوالي كسمات.
widthوheight

print('width: ', im.width)
print('height:', im.height)
# width:  400
# height: 225

وينطبق الشيء نفسه على الصور ذات التدرج الرمادي (أحادية اللون).

im_gray = Image.open('data/src/lena.jpg').convert('L')

print(im.size)
print('width: ', im.width)
print('height:', im.height)
# (400, 225)
# width:  400
# height: 225