کتابخانه PIL و Pillow برای پردازش تصویر
کتابخانه PIL که به کتابخانه تصویر پایتون معروف است، مخفف عبارت Python Imaging Library می باشد. کتابخانه PIL یکی از کتابخانههای پردازش تصویر با پایتون محسوب میشود.
این کتابخانه، پشتیبانی از عملیات مرتبط با پردازش تصویر نظیر باز کردن، دستکاری و ذخیرهسازی تصاویر در فرمتهای مختلف را به زبان پایتون اضافه میکند. با این حال، توسعه آن از سال 2009 دچار وقفه شده است.
اما نسخه گسترش یافته آن یعنی کتابخانه Pillow در زبان پایتون همچنان پشتبیانبی میشود . نصب ساده، قابلیت اجرا در پلتفرمها و سیستمهای عامل اصلی و پشتیبانی از نسخه 3 زبان پایتون، از جمله نقاط قوت این کتابخانه محسوب میشود که توسط برنامهنویسان جهت پردازش تصویر با پایتون مورد استفاده قرار میگیرد.
آموزش نصب کتابخانه PIL :
برای استفاده از این کتابخانه ، ابتدا باید آن را نصب کنید و برای این کار کافی است که کد زیر ار در cmd سیستم ویندوز خود وارد کنید:
1 |
pip install pil |
و بعد از نصب برای استفاده از آن در کد فوق کافی است که آن را ایمپورت کنید :
1 |
from PIL import Image |
در ادامه مباحت مرتبط با آموزش پردازش تصویر با پایتون ، که به معرفی کتابخانه ها و ابزارهای موجود در پایتون برای پردازش تصویر پرداختیم ، به آموزش کتابخانه PIL و PILLOW می پردازیم .
کتابخانه Python Imaging Library) PIL) عملیات های عمومی برای کار روی تصویر مانند تغییر اندازه ، برش، چرخاندن، تغییر رنگ و بسیاری کارهای دیگر روی تصویر را در اختیار ما قرار میدهد. PIL رایگان است و به آسانی از آدرس زیر
http://www.pythonware.com/products/pil/
در دسترس قرار دارد. با استفاده از PIL، شما می توانید تصاویر را از بسیاری فرمت ها بخوانید به بسیاری فرمت های عمومی بنویسید.
مهمترین بخش کتابخانه PIL ماژول Image است.بعنوان مثال در زیر کدلازم برای خواندن یک تصویر آورده شده است:
1 2 3 |
from PIL import Image img = Image.open('lena.jpg') |
در کد فوق ما یک عکس بنام lena.jpg را در پوشه حاوی کد ، در کنار کد قرار داده ایم و کد فوق آن را خوانده و در متغیر img قرار میدهد.
مثال هایی از توابع موجود در PIL برای کار با تصاویر را در ادامه آورده ایم:
ایجاد تصویر بندانگشتی در پایتون :
با استفاده از کد زیر میتوانیم یک تصویر را خوانده و یک تصویر بندانگشتی از آن را بسازیم.
تابع thumbnail یک تاپل از سایز های جدید را می گیرد و تصویر را به اندازه هایی که در تا.ل آمده تغییر اندازه می دهد.
برای ایجاد تصویر بند انگشتی با حداکثر اندازه ۱۲۸ پیکسل از تابع زیر استفاده می کنیم:
1 2 |
img = Image.open('lena.jpg') img.thumbnail((128,128)) |
بریدن تصویر در پایتون با تابع crop :
برای بریدن یک تصویر باید مختصات دو نقطه یعنی نقطه شروع برش (چپ و بالا) و نقطه پایان برش (راست و پایین) را به تابع crop بدهیم ، بعنوان مثال کد زیر را در نظر بگیرید:
1 2 3 |
box = (100,100,400,400) region = img.crop(box) |
تغییر اندازه تصویر در پایتون :
اگر بخواهید اندازه تصویر را تغییر دهید کافی است که تابع resize را بصورت زیر فراخوانی کنید:
1 |
out = img.resize((128,128)) |
اندازه های جدید را بعنوان پارامتر ورودی به کد فوق داده ایم.
چرخاندن تصویر در پایتون با تابع rotate :
برای اینکه بخواهیم یک تصویر را برخلاف جهت عقربه های ساعت بچرخانیم میتوانیم بصورت زیر کد بزنیم:
1 |
out = img.rotate(45) |
زاویه چرخش را بعنوان پارامتر ورودی به آن داده ایم.
کتابخانه PILLOW : نحوه نصب و آموزش کار
کتابخانه Pillow مجموعهای از قابلیتهای پردازش تصویر پایه نظیر «عملیات نقطهای» (Point Operations)، فیلتر گذاری با مجموعهای از «کرنلهای پیچشی» (Convolutional Kernels) تعبیه شده و «تبدیلات فضای رنگی» (Color Space Conversion) را در اختیار کاربر و برنامهنویس قرار میدهد
نصب کتابخانه PILLOW در پایتون
برای نصب این کتابخانه کافی است که دستور زیر را در cmd خود تایپ کنید :
1 |
pip install pillow |
برای استفاده از کتابخانه PILLOW نیز کافی است که بعد از نصب ، آن را در کد خود import کنید :
1 |
from PIL import Image |
خواندن و نمایش تصویر با PILLOW در پایتون :
اولین دستوری که باید اجرا شود تا بتوانیم با تصویری کار کنیم، خواندن تصویر است. این عمل را با متد open انجام میدهیم. برای مثال در همان مسیری که فایل پایتون وجود دارد عکسی به نام lena.jpg را قرار دادیم و آن را باز میکنیم و سپس با متد show آن را نمایش میدهیم.
1 2 3 |
from PIL import Image img = Image.open("lena.jpg") img.show() |
زمانی که متد open را اجرا میکنیم، نمونهای (instance) از این متد برای ما میسازد که اگر آن را نمایش دهیم، اطلاعات عکس را به ما میدهد.
1 2 3 |
print(img) # Output : <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=600x600 at 0x1DEF0E50E80 |
این عبارت نشان میدهد که عکس ما از نوع jpeg و مد آن هم RGB که نشان دهدهی رنگی بودن آن است و ابعاد آن هم 600*600 میباشد.
ذخیره تصویر با PILLOW در پایتون:
برای ذخیره تصاویر از متد save استفاده میکنیم. پارامتری که این متد میپذیرد اسم فایل است. برای مثال در کد زیر عکس را به نام lena2.png ذخیره میکنیم.
1 2 3 4 |
from PIL import Image img = Image.open("lena.jpg") img.show() img.save("lena2.png") |
چرخش تصویر در پایتون :
برای گرداندن تصویر از متد rotate استفاده میکنیم که پارامتر ورودی آن، درجهی چرخش به درجه است.
توجه داشته باشید که چرخش در خلاف جهت عقربههای ساعت انجام میشود.
برای مثال در کد زیر ابتدا عکس را ۴۵ درجه چرخواندیم و آن را به نام lena3 ذحیره کردیم.
1 2 |
rotated_img = img.rotate(45) rotated_img.save("lena3.jpg") |
تغییر اندازه تصویر در پایتون :
برای اینکار از متد resize بهره میبریم.
این متد دو عدد که بیانگر عرض و ارتفاع را در قالب tuple میگیرد و عکس را به آن ابعاد تغییر میدهد. در کد زیر عکس اصلی را به ابعاد ۲۰۰x200 تغییر میدهیم.
1 |
resized_img = img.resize((200,200)) |
بریدن تصویر در پایتون با PILLOW :
برای بریدن تصاویر از متد crop استفاده میکنیم.
این متد مختصات چپ، بالا، راست و پایین تصویر را به عنوان پارامتر میگیرد و آن را برش میدهد.
در نظر داشته باشید که محور این مختصات در بالا چپ (۰,۰) میباشد.
در کد زیر عکس را به یک مربعی از وسط عکس اصلی تبدیل میکنیم که از چهار طرف ۱۰۸ پیکسل فاصله دارد. چون مختصات از بالا چپ شروع میشود، پس چپ و بالا مقدار ۱۰۸ و راست و پایین مقدار 108-1080 که ۹۷۲ میشود، را میگیرند.
1 |
croped_img = img.crop((108,108,972,972)) |
تبدیل تصویر در پایتون با pillow :
برای تبدیل کردن تصاویر به مدهای دیگر از متد convert استفاده میکنیم.
در کد زیر عکس خود را به grayscale یا خاکستری تبدیل کردیم.
1 |
grayed_img = img.convert("L") |
بهبود تصویر در پایتون با کتابخانه PILLOW
برای بهبود تصاویر با استفاده از این کتابخانه میتوانید از ۴ ابزار بهره ببرید.
این ابزارها رنگ، کنتراست، روشنایی و وضوح تصاویر را کنترل میکنند.
در کدهای زیر تمام اینها را دو برابر کردیم.
1 2 3 4 5 6 7 8 9 10 |
from PIL import ImageEnhance enhancer = ImageEnhance.Color(img) #=============== enhancer = ImageEnhance.Contrast(img) #============= enhancer = ImageEnhance.Brightness(img) #============ enhancer = ImageEnhance.Sharpness(img) |
اعمال فیلتر بر روی تصویر در پایتون با PILLOW
گذاشتن فیلتر قابلیت جالبی است که کتابخانهی pillow در اختیار برنامهنویس قرار میدهد.
در این کتابخانه ۱۰ فیلتر وجود دارد که به صورت زیر است:
- فیلتر BLUR
- فیلتر CONTOUR
- فیلتر DETAIL
- فیلتر EDGE_ENHANCE
- فیلتر EDGE_ENHANCE_MORE
- فیلتر EMBOSS
- فیلتر FIND_EDGES
- فیلتر SMOOTH
- فیلتر SMOOTH_MORE
- فیلتر SHARPEN
در کد زیر با اعمال فیلتر Blur عکس را تار میکنیم:
1 2 3 4 |
from PIL import ImageFilter img = Image.open("lena.jpg") blured_img = img.filter(ImageFilter.BLUR) blured_img .show() |
«بهبود تصاویر» (Image Enhancement) در پایتون
با استفاده از ماژول ImageFilter در کتابخانه Pillow، میتوان تصاویر دیجیتالی را از طریق دستکاری مقادیر «کنتراست» (Contrast)، بهبود بخشید.
1 2 3 4 5 6 7 8 9 10 |
from PIL import Image,ImageFilter #Read image im = Image.open('image.jpg') #Display image im.show() from PIL import ImageEnhance enh = ImageEnhance.Contrast(im) enh.enhance(1.8).show("30% more contrast") 5-pillow.png |
اگر در خصوص کتابخانه PILLOW نیاز به مثال های بیشتری داشتید بد نیست سری به داکیومنت PILLOW نیز بزنید.
سلام من یه سوال دارم .من این کتابخانه رو که نصب میکنم ارور میده نمیدونم چرا.میشه راهنماییم کنید