منبع اصلی نوشتار زیر در این لینک قرار دارد

گرفتن اندازه تصویر (عرض و ارتفاع) در پایتون با OpenCV و Pillow

در این پست آموزشی میخواهیم دو روش گرفتن width و height یک تصویر در پایتون را آموزش دهیم.

به طور خلاصه می توان گفت که اندازه تصویر را می توان در قالب tuple از ویژگی shape از شئ ndarray در OpenCV و ویژگی size از شئ PIL.Image در Pillow یا همان PIL به دست آورد. توجه کنید که در این دو روش ترتیب مقادیر width و height متفاوت داده می شود.

دز ادامه مطلب به بخش های زیر می پردازیم.

  • اندازه تصویر در OpenCV با ndarray.shape
    • برای تصاویر رنگی
    • برای تصاویر خاکستری (تک رنگ)
  • اندازه تصویر در Pillow با ویژگی size

اندازه تصویر در OpenCV با ndarray.shape

هنگامی که یک فایل تصویر توسط OpenCV خوانده می شود، خروجی از جنس آرایه NumPy خواهد بود. بنابراین اندازه (عرض، ارتفاع) تصویر را می توان از ویژگی shape به دست آورد.

گرفتن اندازه برای تصاویر رنگی

در مورد یک تصویر رنگی، یک ndarray سه بعدی با اندازه ابعاد زیر خوانده می شود.

row (height) x column (width) x color (3)

بنابراین اگر مقدار ویزگی shape شئ خوانده شده را بگیرید، درون tuple دریافتی ابتدا ارتفاع و سپس عرض و در نهایت مقدار عدد سه را خواهید داشت.

به مثال زیر توجه کنید.

import cv2

im = cv2.imread('color-image.jpg')

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

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

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

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

 

گرفتن اندازه برای تصاویر خاکستری (تک رنگ)

اگر سعی کنید یک تصویر خاکستری بدون رنگ را از فایلی بخوانید، یک ndarray سه بعدی با اندازه ابعاد زیر خوانده می شود.

row (height) x column (width)

بنابراین اگر مقدار ویزگی shape شئ خوانده شده را بگیرید، درون tuple آن فقط دو مقدار وجود دارد که ابتدا ارتفاع و سپس عرض را خواهید داشت.

مثال زیر برای یک تصویر خاکستری است.

im_gray = cv2.imread('grayscale-image.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

 

اندازه تصویر در Pillow با ویژگی size

شئ PIL.Image که با خواندن یک تصویر با کتابخانه Pillow (PIL) به دست می‌آید، دارای ویژگی‌های اندازه (size)، عرض (width) و ارتفاع (height) است.

اگر مقدار ویژگی size را بگیرید، یک tuple خواهید داشت که به صورت (width, height) مرتب شده است.

مثال زیر با استفاده از این روش نوشته شده است.

from PIL import Image

im = Image.open('image.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

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

این شکل نوشتار و استفاده، برای تصاویر رنگی و خاکستری تفاوتی ندارد و به یک شیوه یکسان است.

 

منبع:

Get image size (width, height) with Python, OpenCV, Pillow (PIL)

نوشته گرفتن اندازه تصویر (عرض و ارتفاع) در پایتون با OpenCV و Pillow اولین بار در اوپن مایند. پدیدار شد.