FA-TOOLS — Header Component
کدهای آماده اضافه کردن فیلتر به تصویر با پایتون

کدهای آماده اضافه کردن فیلتر به تصویر با پایتون

خلاصه کاربردی:

در این مقاله یاد می‌گیرید چگونه با استفاده از کتابخانه‌های محبوب Pillow و OpenCV، انواع فیلترهای جذاب مانند سیاه و سفید، تار کردن (Blur)، افکت سپیا (Sepia)، تیز کردن جزئیات (Sharpen) و نقاشی مدادی را با چند خط کد ساده پایتون روی تصاویر خود اعمال کنید.

چرا پردازش تصویر با پایتون؟

کدهای آماده اضافه کردن فیلتر به تصویر با پایتون — تصویر 2

اضافه کردن فیلتر به تصویر در پایتون به شما امکان می‌دهد بدون نیاز به نرم‌افزارهای سنگین مانند فتوشاپ، تغییراتی مثل تار کردن، سیاه‌وسفید کردن و افزایش وضوح را روی هزاران تصویر به‌طور خودکار اعمال کنید. این کار معمولاً با کتابخانه‌های قدرتمندی مثل Pillow و OpenCV انجام می‌شود که سرعت و دقت فوق‌العاده‌ای دارند.

امروزه پردازش تصویر بخش جدایی‌ناپذیری از توسعه وب، هوش مصنوعی و اتوماسیون است. برای مثال، اگر یک وب‌سایت فروشگاهی دارید و می‌خواهید تمام تصاویر آپلود شده توسط کاربران را به صورت خودکار بهینه‌سازی کنید، استفاده از کدهای آماده پایتون بهترین و سریع‌ترین راهکار خواهد بود. برای دسترسی به پروژه‌های مشابه بیشتر، می‌توانید به بخش تکه‌کدهای پایتون در سایت ما مراجعه کنید.

نصب کتابخانه‌های مورد نیاز

کدهای آماده اضافه کردن فیلتر به تصویر با پایتون — تصویر 3

برای شروع کار با این کدهای آماده، ابتدا باید دو کتابخانه اصلی پردازش تصویر در پایتون یعنی Pillow (که نسخه پیشرفته‌تر PIL است) و OpenCV را نصب کنید. نصب این پکیج‌ها از طریق ابزار pip بسیار ساده است.

کافی است ترمینال یا خط فرمان (CMD) خود را باز کرده و دستور زیر را اجرا کنید:

pip install Pillow opencv-python numpy

کدهای آماده فیلترهای کاربردی با کتابخانه Pillow

کدهای آماده اضافه کردن فیلتر به تصویر با پایتون — تصویر 4

کتابخانه Pillow سبک‌ترین و ساده‌ترین ابزار پایتون برای کارهای پایه روی تصاویر است. در ادامه سه فیلتر بسیار پرکاربرد یعنی سیاه و سفید، تار کردن و تیز کردن جزئیات را با این کتابخانه پیاده‌سازی می‌کنیم.

۱. فیلتر سیاه و سفید کردن تصویر (Grayscale)

تبدیل تصویر رنگی به سیاه و سفید یکی از پایه‌ای‌ترین عملیات‌های پردازش تصویر است. این کار حجم تصویر را کاهش داده و تحلیل آن را برای سیستم‌ها راحت‌تر می‌کند.

from PIL import Image

# ۱. باز کردن تصویر اصلی
image = Image.open(“input.jpg”)

# ۲. اعمال فیلتر سیاه و سفید (تبدیل به حالت L)
grayscale_image = image.convert(“L”)

# ۳. ذخیره تصویر نهایی
grayscale_image.save(“grayscale_output.jpg”)
print(“فیلتر سیاه و سفید با موفقیت اعمال شد!”)

۲. فیلتر تار کردن تصویر (Gaussian Blur)

تار کردن تصویر یا مات کردن، برای پس‌زمینه‌ها یا کاهش نویز تصویر بسیار کاربرد دارد. پارامتر radius در کد زیر میزان تاری را تعیین می‌کند.

from PIL import Image, ImageFilter

# باز کردن تصویر
image = Image.open(“input.jpg”)

# اعمال فیلتر تاری گوسی با شعاع ۵ پیکسل
blurred_image = image.filter(ImageFilter.GaussianBlur(radius=5))

# ذخیره خروجی
blurred_image.save(“blurred_output.jpg”)
print(“فیلتر تاری اعمال شد.”)

۳. فیلتر تیز کردن جزئیات تصویر (Sharpen)

این فیلتر لبه‌ها و جزئیات ریز تصویر را تقویت می‌کند تا تصویر شما واضح‌تر و باکیفیت‌تر به نظر برسد.

from PIL import Image, ImageFilter

image = Image.open(“input.jpg”)

# اعمال فیلتر افزایش وضوح و تیز کردن لبه‌ها
sharpened_image = image.filter(ImageFilter.SHARPEN)

sharpened_image.save(“sharpened_output.jpg”)
print(“فیلتر افزایش وضوح با موفقیت اعمال شد.”)

کدهای آماده فیلترهای پیشرفته با OpenCV

کدهای آماده اضافه کردن فیلتر به تصویر با پایتون — تصویر 5

کتابخانه OpenCV یک ابزار فوق‌العاده قدرتمند در زمینه بینایی ماشین و پردازش تصویر حرفه‌ای است. با OpenCV می‌توانیم فیلترهای ریاضی و پیچیده‌تری را روی تصاویر پیاده کنیم که جذابیت بصری بسیار بیشتری دارند.

۴. فیلتر جذاب و نوستالژیک سپیا (Sepia Effect)

فیلتر سپیا با اعمال یک طیف رنگ قهوه‌ای ملایم، ظاهری قدیمی و نوستالژیک به تصاویر می‌بخشد. این افکت با ضرب کردن یک ماتریس تبدیل رنگ خاص در پیکسل‌های تصویر ایجاد می‌شود.

import cv2
import numpy as np

# خواندن تصویر ورودی
img = cv2.imread(“input.jpg”)

# تعریف ماتریس فیلتر سپیا
sepia_kernel = np.array([[0.272, 0.534, 0.131],
[0.349, 0.686, 0.168],
[0.393, 0.769, 0.189]])

# اعمال ماتریس روی تصویر با استفاده از transform
sepia_image = cv2.transform(img, sepia_kernel)

# جلوگیری از خطای سرریز رنگ (بالاتر از ۲۵۵)
sepia_image[np.where(sepia_image > 255)] = 255

# ذخیره تصویر خروجی
cv2.imwrite(“sepia_output.jpg”, sepia_image)
print(“افکت جذاب سپیا اعمال شد!”)

۵. فیلتر تشخیص لبه‌های تصویر (Canny Edge Detection)

الگوریتم Canny یکی از معروف‌ترین روش‌ها برای استخراج خطوط مرزی و لبه‌های اشیا درون تصویر است که در پروژه‌های پردازش تصویر صنعتی بسیار کاربرد دارد.

import cv2

# بارگذاری تصویر به صورت سیاه و سفید
img = cv2.imread(“input.jpg”, cv2.IMREAD_GRAYSCALE)

# اعمال فیلتر تشخیص لبه Canny
edges = cv2.Canny(img, 100, 200)

# ذخیره تصویر لبه‌ها
cv2.imwrite(“edges_output.jpg”, edges)
print(“لبه‌های تصویر با موفقیت شناسایی و ذخیره شدند.”)

۶. افکت نقاشی مدادی یا اسکچ (Pencil Sketch)

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

import cv2

img = cv2.imread(“input.jpg”)

# تبدیل تصویر رنگی به طرح مدادی سیاه و سفید و رنگی
sketch_gray, sketch_color = cv2.pencilSketch(img, sigma_s=60, sigma_r=0.07, shade_factor=0.05)

# ذخیره طرح مدادی سیاه و سفید
cv2.imwrite(“sketch_output.jpg”, sketch_gray)
print(“افکت نقاشی مدادی ساخته شد!”)

مقایسه کتابخانه‌های Pillow و OpenCV

انتخاب کتابخانه مناسب به هدف پروژه شما بستگی دارد. در جدول زیر این دو کتابخانه محبوب پایتونی را از جنبه‌های مختلف مقایسه کرده‌ایم تا انتخاب بهتری داشته باشید:

ویژگی / معیار توضیحات و تفاوت‌ها
سهولت استفاده کتابخانه Pillow سینتکس بسیار ساده‌تری دارد و برای پروژه‌های کوچک و سریع فوق‌العاده است.
سرعت و کارایی کتابخانه OpenCV با زبان C++ نوشته شده و برای کارهای سنگین و بلادرنگ (Real-time) بسیار سریع‌تر است.
تنوع فیلترها کتابخانه OpenCV امکانات پیچیده‌تر و الگوریتم‌های پیشرفته ریاضی بیشتری را ارائه می‌دهد.
فرمت‌های پشتیبانی‌شده هر دو از فرمت‌های اصلی مانند PNG, JPEG, BMP و WEBP به‌طور کامل پشتیبانی می‌کنند.

راهنمای گام‌به‌گام پیاده‌سازی فیلترهای اختصاصی

برای اجرای کدهای بالا و مشاهده خروجی کار روی سیستم خود، کافی است مراحل ساده زیر را به ترتیب انجام دهید:

  1. یک فایل متنی جدید بسازید و نام آن را filter.py بگذارید.
  2. یک تصویر نمونه با نام input.jpg در همان فولدری که فایل پایتون قرار دارد کپی کنید.
  3. یکی از کدهای آماده بالا (مثلاً کد فیلتر سپیا یا تار کردن) را کپی کرده و داخل فایل پایتون قرار دهید.
  4. فایل را ذخیره کرده و با زدن دستور python filter.py در ترمینال، آن را اجرا کنید.
  5. فایل جدید فیلتر شده (مثلا sepia_output.jpg) در همان مسیر ایجاد خواهد شد.

اگر به دنیای برنامه‌نویسی وب و طراحی فرانت‌اند نیز علاقه‌مند هستید و می‌خواهید فیلترهای تصویری را مستقیماً در مرورگر کاربر اعمال کنید، مطالعه بخش جذاب کدهای آماده CSS را که شامل افکت‌های بی‌نظیر برای طراحی سایت است، به شما پیشنهاد می‌کنیم. همچنین با یادگیری ابزارهای مختلف در بخش کلیدی کدهای آماده وب‌سایت ما، می‌توانید مهارت‌های خود را چند برابر کنید.

عیب‌یابی سریع و حل خطاهای رایج

رفع مشکلات احتمالی در اجرای کدهای فیلتر تصویر:

  • خطای ModuleNotFoundError:
    این خطا نشان می‌دهد کتابخانه مورد نظر نصب نشده است. مطمئن شوید دستور pip install Pillow یا pip install opencv-python را با موفقیت در ترمینال اجرا کرده‌اید.
  • خطای FileNotFoundError یا خالی بودن خروجی:
    تصویر ورودی شما پیدا نشده است. دقت کنید که نام عکس شما دقیقاً input.jpg باشد و حتماً در کنار فایل پایتون قرار داشته باشد. پسوند فایل‌ها را نیز بررسی کنید (مثلاً jpg با jpeg متفاوت است).
  • کاهش شدید کیفیت خروجی در OpenCV:
    در هنگام کار با متغیرهای ریاضی، ممکن است مقادیر پیکسلی از ۲۵۵ بیشتر شوند. حتماً از توابعی مثل np.clip یا متدهای جلوگیری از سرریز مقادیر رنگی استفاده کنید.

پرسش‌های متداول

آیا فیلترهای نوشته شده روی تمام فرمت‌های تصویر کار می‌کنند؟

بله، این کدهای آماده پایتون از فرمت‌های رایج تصویر مثل JPG, JPEG, PNG, BMP و WEBP به خوبی پشتیبانی می‌کنند.

کدام کتابخانه برای پردازش تصویر دسته جمعی (Bulk) مناسب‌تر است؟

برای کارهای دسته‌جمعی سبک، کتابخانه Pillow عالی است، اما اگر حجم تصاویر بسیار بالاست یا به پردازش‌های سنگین نیاز دارید، OpenCV به علت سرعت بالا اولویت دارد.

چگونه می‌توان تاری فیلتر Gaussian Blur را کمتر یا بیشتر کرد؟

در کتابخانه Pillow کافی است مقدار پارامتر radius را تغییر دهید؛ هر چقدر این عدد بزرگ‌تر باشد، تصویر نهایی تارتر خواهد شد.

چرا تصاویر خروجی در OpenCV گاهی اوقات تغییر رنگ غیرطبیعی دارند؟

دلیل آن این است که OpenCV تصاویر را به صورت پیش‌فرض با فرمت رنگی BGR (آبی، سبز، قرمز) می‌خواند، در حالی که بیشتر برنامه‌ها از RGB استفاده می‌کنند. برای حل این مشکل باید از مبدل‌های رنگی در OpenCV استفاده کنید.

Table of Contents

آخرین نوشته‌ها