يوجد في 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