آشنایی با Pillow، کتابخانه پردازش تصاویر در پایتون
یکی از کتابخانههای جالب پایتون که تمام عملیات مربوط به پردازش تصویر را در خود دارد، کتابخانهی Pillow است. این کتابخانه از فرمتهای متعددی از جمله JPG، PNG، GIF و … پشتیبانی میکند.
نصب Pillow
این کتابخانه به صورت پیش فرض روی پایتون ۳ نصب است؛ ولی میتوانید با دستور زیر آن را نصب کنید.
pip install pillow
استفاده از Pillow
به منظور کار با این کتابخانه باید ابتدا pillow را import کنیم. پس در اول فایل خود کد زیر را وارد کنیم.
from PIL import Image
خواندن و نمایش تصویر
اولین دستوری که باید اجرا شود تا بتوانیم با تصویری کار کنیم، خواندن تصویر است. این عمل را با متد open انجام میدهیم. برای مثال در همان مسیری که فایل پایتون وجود دارد عکسی به نام zth.jpg را قرار دادیم و آن را باز میکنیم و سپس با متد show آن را نمایش میدهیم.
به دلیل بزرگ بودن عکس، فایل اصلی را از این لینک دریافت کنید.
from PIL import Image img = Image.open("zth.jpg") img.show()
زمانی که متد open را اجرا میکنیم، نمونهای (instance) از این متد برای ما میسازد که اگر آن را نمایش دهیم، اطلاعات عکس را به ما میدهد.
print(img) # Output : <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1080x1080 at 0x1DEF0E50E80>
این عبارت نشان میدهد که عکس ما از نوع jpeg و مد آن هم RGB که نشان دهدهی رنگی بودن آن است و ابعاد آن هم ۱۰۸۰x1080 میباشد.
ذخیره تصویر
برای ذخیره تصاویر از متد save استفاده میکنیم. پارامتری که این متد میپذیرد اسم فایل است. برای مثال در کد زیر عکس را به نام zth-edited.png ذخیره میکنیم.
img.save("zth-edited.png")
چرخش تصویر
برای گرداندن تصویر از متد rotate استفاده میکنیم که پارامتر ورودی آن، درجهی چرخش به درجه است. توجه داشته باشید که چرخش در خلاف جهت عقربههای ساعت انجام میشود. برای مثال در کد زیر ابتدا عکس را ۴۵ درجه چرخواندیم و آن را به نام zth-rotated ذحیره کردیم.
rotated_img = img.rotate(45) rotated_img.save("zth-rotated.jpg")
تغییر اندازه تصویر
برای اینکار از متد resize بهره میبریم. این متد دو عدد که بیانگر عرض و ارتفاع را در قالب tuple میگیرد و عکس را به آن ابعاد تغییر میدهد. در کد زیر عکس اصلی را به ابعاد ۲۰۰x200 تغییر میدهیم.
resized_img = img.resize((200,200)) resized_img.save("zth-resized.jpg")
بریدن تصویر
برای بریدن تصاویر از متد crop استفاده میکنیم. این متد مختصات چپ، بالا، راست و پایین تصویر را به عنوان پارامتر میگیرد و آن را برش میدهد. در نظر داشته باشید که محور این مختصات در بالا چپ (۰,۰) میباشد. در کد زیر عکس را به یک مربعی از وسط عکس اصلی تبدیل میکنیم که از چهار طرف ۱۰۸ پیکسل فاصله دارد. چون مختصات از بالا چپ شروع میشود، پس چپ و بالا مقدار ۱۰۸ و راست و پایین مقدار 108-1080 که ۹۷۲ میشود، را میگیرند.
croped_img = img.crop((108,108,972,972)) croped_img.save("zth-croped.jpg")
تبدیل تصویر
برای تبدیل کردن تصاویر به مدهای دیگر از متد convert استفاده میکنیم. در کد زیر عکس خود را به grayscale یا خاکستری تبدیل کردیم.
grayed_img = img.convert("L") grayed_img.save("zth-grayed.jpg")
بهبود تصویر
برای بهبود تصاویر با استفاده از این کتابخانه میتوانید از ۴ ابزار بهره ببرید. این ابزارها رنگ، کنتراست، روشنایی و وضوح تصاویر را کنترل میکنند. در کدهای زیر تمام اینها را دو برابر کردیم.
from PIL import ImageEnhance enhancer = ImageEnhance.Color(img) enhancer.enhance(3).save("zth-enhanced-color.jpg") enhancer = ImageEnhance.Contrast(img) enhancer.enhance(3).save("zth-enhanced-contrast.jpg") enhancer = ImageEnhance.Brightness(img) enhancer.enhance(3).save("zth-enhanced-brightness.jpg") enhancer = ImageEnhance.Sharpness(img) enhancer.enhance(3).save("zth-enhanced-sharpness.jpg")
گذاشتن فیلتر بر روی تصاویر
گذاشتن فیلتر قابلیت جالبی است که کتابخانهی pillow در اختیار برنامهنویس قرار میدهد. در این کتابخانه ۱۰ فیلتر وجود دارد که به صورت زیر است:
- BLUR
- CONTOUR
- DETAIL
- EDGE_ENHANCE
- EDGE_ENHANCE_MORE
- EMBOSS
- FIND_EDGES
- SMOOTH
- SMOOTH_MORE
- SHARPEN
در کد زیر عکس را تار میکنیم.
from PIL import ImageFilter blured_img = img.filter(ImageFilter.BLUR) blured_img.save("zth-blured.jpg")
Attributeهای این کتابخانه
- format: فرمت تصویر را به ما نشان میدهد (JPG یا PNG یا غیره)
- width: عرض تصویر را نشان میدهد.
- height: ارتفاع تصویر را نشان میدهد.
- mode: مد تصویر را نشان میدهد (رنگی یا خاکستری)
- size: ابعاد تصویر را نشان میدهد.
print(img.format) print(img.width) print(img.height) print(img.mode) print(img.size) # Output: JPEG # Output: 1080 # Output: 1080 # Output: RGB # Output: (1080, 1080)
در این مقاله سعی شد تا قابلیتهای کتابخانهی Pillow به صورت مختصر گفته شود. documentation این کتابخانه به صورت کامل در این لینک وجود دارد. به دلیل سادگی استفاده از این کتابخانهی برای پردازش تصاویر، بسیاری از برنامه نویسان از آن در برنامه نویسی روزانهی خود استفاده میکنند. ولی اگر در پروژههای یادگیری عمیق به پردازش تصویر نیاز داشتید، استفاده از OpenCV توصیه میشود.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.