آموزش مقدماتی پردازش تصویر در پایتون

پردازش تصویر یکی از حوزههای جذاب و کاربردی در دنیای برنامهنویسی است که به شما امکان میدهد تصاویر را تحلیل، دستکاری و بهبود دهید. در این مقاله، قصد داریم با استفاده از زبان برنامهنویسی پایتون و کتابخانههای قدرتمندی مانند OpenCV و NumPy ، مفاهیم پایهای پردازش تصویر را به صورت عملی و پروژهمحور آموزش دهیم.
سرفصلها
- معرفی کتابخانهها و نصب آنها
- خواندن و نمایش تصویر
- تبدیل تصویر به سیاه و سفید (Grayscale)
- اعمال فیلترها و تغییر اندازه تصویر
- تشخیص لبهها با الگوریتم Canny
- پروژه عملی: شمارش اشیاء در تصویر
1. معرفی کتابخانهها و نصب آنها
کتابخانه OpenCV
OpenCV (Open Source Computer Vision Library) یکی از معروفترین کتابخانهها برای پردازش تصویر و بینایی ماشین است. این کتابخانه شامل توابعی برای خواندن، نوشتن، تغییر و تحلیل تصاویر است.
کتابخانه NumPy
NumPy یک کتابخانه قدرتمند برای کار با آرایههای چندبعدی است. در پردازش تصویر، تصاویر به صورت آرایههای عددی ذخیره میشوند و NumPy ابزارهایی برای دستکاری این آرایهها فراهم میکند.
نصب کتابخانهها
برای شروع، باید کتابخانههای مورد نیاز را نصب کنید. این کار را میتوانید با دستورات زیر انجام دهید:
pip install opencv-python
pip install numpy
2. خواندن و نمایش تصویر
اولین قدم در پردازش تصویر، خواندن تصویر از فایل و نمایش آن است. برای این کار از تابع ()
cv2.imread
برای خواندن تصویر و ()
cv2.imshow
برای نمایش آن استفاده میکنیم.
کد نمونه:
import cv2
# خواندن تصویر
image = cv2.imread('image.jpg')
# نمایش تصویر
cv2.imshow('Original Image', image)
# منتظر ماندن تا کلیدی فشار داده شود
cv2.waitKey(0)
# بستن تمام پنجرهها
cv2.destroyAllWindows()
توضیحات:
cv2.imread('image.jpg')
: تصویر را از فایل میخواند.cv2.imshow('Original Image', image)
: تصویر را در یک پنجره نمایش میدهد.cv2.waitKey(0)
: برنامه را منتظر میکند تا کاربر کلیدی فشار دهد.()cv2.destroyAllWindows
: تمام پنجرههای باز را میبندد.
3. تبدیل تصویر به سیاه و سفید (Grayscale)
تصاویر سیاه و سفید (Grayscale) برای بسیاری از عملیات پردازش تصویر مفید هستند، زیرا محاسبات روی آنها سادهتر است.
کد نمونه:
import cv2
# خواندن تصویر
image = cv2.imread('image.jpg')
# تبدیل تصویر به سیاه و سفید
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# نمایش تصویر سیاه و سفید
cv2.imshow('Grayscale Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
توضیحات:
cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
: تصویر رنگی را به سیاه و سفید تبدیل میکند.
4. اعمال فیلترها و تغییر اندازه تصویر
تغییر اندازه تصویر
برای تغییر اندازه تصویر، از تابع cv2.resize()
استفاده میکنیم.
کد نمونه:
import cv2
# خواندن تصویر
image = cv2.imread('image.jpg')
# تغییر اندازه تصویر
resized_image = cv2.resize(image, (300, 300))
# نمایش تصویر تغییر اندازهیافته
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
اعمال فیلتر Blur
فیلتر Blur برای محو کردن تصویر استفاده میشود و معمولاً برای کاهش نویز تصویر کاربرد دارد.
کد نمونه:
import cv2
# خواندن تصویر
image = cv2.imread('image.jpg')
# اعمال فیلتر Blur
blurred_image = cv2.GaussianBlur(image, (15, 15), 0)
# نمایش تصویر محوشده
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
5. تشخیص لبهها با الگوریتم Canny
تشخیص لبهها یکی از مهمترین مراحل در بسیاری از پروژههای بینایی ماشین است. الگوریتم Canny یکی از معروفترین روشها برای تشخیص لبهها است.
کد نمونه:
import cv2
# خواندن تصویر
image = cv2.imread('image.jpg')
# تبدیل تصویر به سیاه و سفید
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# تشخیص لبهها با الگوریتم Canny
edges = cv2.Canny(gray_image, 100, 200)
# نمایش تصویر با لبههای تشخیصدادهشده
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
توضیحات:
cv2.Canny(gray_image, 100, 200)
: الگوریتم Canny را برای تشخیص لبهها اعمال میکند. مقادیر 100 و 200 حداقل و حداکثر آستانهها هستند.
6. پروژه عملی: شمارش اشیاء در تصویر
در این پروژه، قصد داریم تعداد اشیاء موجود در یک تصویر را شمارش کنیم. برای این کار از مفاهیمی مانند تبدیل تصویر به سیاه و سفید، تشخیص لبهها و پیدا کردن کانتورها (Contours) استفاده میکنیم.
کد نمونه:
import cv2
# خواندن تصویر
image = cv2.imread('objects.jpg')
# تبدیل تصویر به سیاه و سفید
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# اعمال فیلتر Blur برای کاهش نویز
blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)
# تشخیص لبهها با الگوریتم Canny
edges = cv2.Canny(blurred_image, 50, 150)
# پیدا کردن کانتورها
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# رسم کانتورها روی تصویر اصلی
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)
# نمایش تعداد اشیاء
print(f"Number of objects: {len(contours)}")
# نمایش تصویر با کانتورها
cv2.imshow('Objects', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
توضیحات:
()cv2.findContours
: کانتورها (خطوط بستهای که اشیاء را احاطه میکنند) را پیدا میکند.()cv2.drawContours
: کانتورها را روی تصویر اصلی رسم میکند.len(contours)
: تعداد اشیاء (کانتورها) را نشان میدهد.
نتیجهگیری
در این مقاله، با مفاهیم پایهای پردازش تصویر در پایتون آشنا شدیم و چندین پروژه عملی را انجام دادیم. از خواندن و نمایش تصویر گرفته تا تبدیل تصویر به سیاه و سفید، اعمال فیلترها، تشخیص لبهها و شمارش اشیاء، همه این موارد را با استفاده از کتابخانههای OpenCV و NumPy پیادهسازی کردیم.
دیدگاهتان را بنویسید