کتابخانه pillow پایتون
وقتی به یک عکس نگاه می کنید، اشیا و افراد را در آن می بینید. با این حال، هنگامی که یک عکس را به صورت برنامهنویسی با پایتون یا هر زبان دیگری میخوانید، رایانه آرایهای از اعداد را میبیند. در این آموزش، نحوه دستکاری تصاویر و انجام پردازش اولیه تصویر با استفاده از کتابخانه Pillow پایتون را خواهید آموخت.
Pillow کتابخانه اصلی پایتون برای کار با تصاویر است. حتی با وجود اینکه کتابخانه های پایتون دیگری برای پردازش تصویر وجود دارد، Pillow همچنان یک ابزار مهم برای کار با تصاویر است.
کتابخانه Pillow پایتون شاخه ای از یک کتابخانه قدیمی به نام PIL است. PIL مخفف Python Imaging Library است و این کتابخانه اصلی است که پایتون را قادر میسازد تا با تصاویر کار کند. PIL در سال 2011 متوقف شد و فقط از Python 2 پشتیبانی می کند.
بیش از یک ماژول در پایتون برای کار با تصاویر و انجام پردازش تصویر وجود دارد. اگر می خواهید مستقیماً با دستکاری پیکسل های آنها با تصاویر کار کنید، می توانید از NumPy و SciPy استفاده کنید. دیگر کتابخانه های محبوب برای پردازش تصویر OpenCV، scikit-image و Mahota هستند. برخی از این کتابخانه ها سریعتر و قدرتمندتر از Pillow هستند.
برای دستکاری و پردازش تصاویر، Pillow ابزارهایی را ارائه می دهد که شبیه به ابزارهایی هستند که در نرم افزارهای پردازش تصویر مانند فتوشاپ یافت می شوند. برخی از کتابخانههای مدرنتر پردازش تصویر پایتون از Pillow درون خود استفاده میکنند و اغلب عملکردهای پیشرفتهتری را ارائه میکنند.
# نصب کتابخانه pillow
کتابخانه Pillow را میتوانید با استفاده از مدیر بسته pip نصب کنید. برای نصب جدیدترین نسخه کتابخانه pillow از دستور زیر استفاده کنید:
pip install pillow
این دستور به خوبی در سیستم عامل لینوکس کار میکند. اما اگر در سیستم عامل های دیگر مانند ویندوز با خطا مواجه شدید، باید از conda برای نصب pillow استفاده کنید:
conda install -c anaconda pillow
برای اطلاعات بیشتر در رابطه با conda میتوانید ویدیو آناکوندا در پایتون را مشاهده کنید.
# شروع کار با pillow
کلاس اصلی که در Pillow باید با آن کار کنید Image است. هنگامی که یک تصویر را با استفاده از Pillow می خوانید، تصویر در یک آبجکت از نوع Image ذخیره می شود. برای باز کردن یک تصویر از متد open کلاس Image استفاده کنید:
from PIL import Image
with Image.open('test.jpg') as im:
im.show()
دقت کنید که تصویر را با استفاده از with در یک context manager باز کردیم تا به صورت اتوماتیک بسته شود. سپس با استفاده از متد show مشخص کردیم که میخواهیم تصویر نمایش داده شود. اگر کد بالا را اجرا کنید ابزاری که در سیستم عاملتان برای نمایش تصاویر استفاده میشود باز شده و تصویر را نمایش میدهد.
میتوانید با استفاده از size و mode و format به مقادیر اندازه و حالت و فرمت تصویر دسترسی پیدا کنید:
>>> im.format
'JPEG'
>>> im.size
(1920, 1273)
>>> im.mode
'RGB'
format یک تصویر نشان می دهد که با چه نوع تصویری سروکار دارید. در این مورد، فرمت تصویر 'JPEG' است. size عرض و ارتفاع تصویر را بر حسب پیکسل نشان می دهد و mode این تصویر 'RGB' است.
# برش تصاویر با کتابخانه pillow
برش تصویر روشی برای ویرایش عکس است که شامل حذف بخشی از تصویر برای تأکید بر موضوع، تغییر نسبت تصویر یا بهبود کادربندی است. برش تصویر یکی از عملیات های مهم پردازش تصویر برای حذف بخش های ناخواسته یک تصویر و همچنین افزودن ویژگی های مورد نیاز به یک تصویر است. این فرآیند به طور گسترده در برنامه های کاربردی وب برای آپلود یک تصویر استفاده می شود.
کتابخانه Pillow یک راه آسان از طریق تابع crop برای برش تصاویر در پایتون ارائه می دهد که سینتکس آن به شکل زیر است:
Image.crop(box=None)
پارامتر box یک تاپل با چهار مقدار است که به ترتیب جهت راست، بالا، چپ و پایین را مشخص میکند. سیستم مختصات مورد استفاده در Pillow مختصات (0، 0) را به پیکسل در گوشه بالا سمت چپ اختصاص می دهد. این همان سیستم مختصاتی است که معمولاً برای آرایه های دو بعدی استفاده می شود:
with Image.open('test.jpg') as im:
im.crop((300, 150, 700, 1000))
im.show()
مختصات برش تصویر به شکل زیر تعیین میشود:
# ذخیره تصاویر
هنگامی که پردازش یک تصویر به پایان رسید، می توانید تصویر جدید را با متد save در یک فایل ذخیره کنید و نامی را برای آن انتخاب کنید. هنگام ذخیره یک تصویر، می توانید پسوندی متفاوت از اصلی آن تعیین کنید و تصویر ذخیره شده به فرمت مشخص شده تبدیل می شود:
with Image.open('test.jpg') as im:
im.crop((300, 700, 150, 1000))
im.save('/home/amir/Desktop/new.png')
در کد بالا ابتدا تصویر را برش دادیم و سپس تصویر جدید را با نام و پسوندی متفاوت ذخیره کردیم.
# تغییر ابعاد تصاویر
برای تغییر اندازه یک تصویر، از متد resize استفاده میکنید و در یک آرگومان تاپلی دو عدد صحیح که عرض و ارتفاع تصویر تغییر یافته را نشان میدهد، ارسال میکنید. این تابع تصویر اصلی را تغییر نمی دهد، در عوض تصویر دیگری را با ابعاد جدید ایجاد میکند:
with Image.open('test.jpg') as im:
im.resize((300, 170))
متد resize تصویری را برمیگرداند که عرض و ارتفاع آن دقیقاً با مقدار ارسال شده مطابقت دارد. این می تواند همان چیزی باشد که شما می خواهید، اما گاهی اوقات ممکن است متوجه شوید که تصاویر بازگردانده شده توسط این تابع ایده آل نیستند. این بیشتر به این دلیل است که تابع resize نسبت ابعاد تصویر را در نظر نمیگیرد، بنابراین ممکن است تصویر کشیده یا فشرده به نظر برسد.
اگر می خواهید اندازه تصاویر را تغییر دهید و نسبت ابعاد آنها را حفظ کنید، باید از تابع thumbnail برای تغییر اندازه آنها استفاده کنید که یک آرگومان تاپلی می گیرد که حداکثر عرض و حداکثر ارتفاع تصویر جدید را نشان می دهد:
with Image.open('test.jpg') as im:
im.thumbnail((400, 400))
ارسال نظر