ویژگی تصویر

کتابخانه OpenCV در پایتون — آموزش جامع و کاربردی بینایی ماشین

  /  پایتون   /  کتابخانه OpenCV در پایتون
بنر تبلیغاتی الف

کتابخانه OpenCV یکی از قدرتمندترین و محبوب‌ترین ابزارها برای پردازش تصویر (Image Processing)، بینایی ماشین (Computer Vision) و یادگیری ماشین (Machine Learning) است. این کتابخانه در ابتدا به زبان C++ نوشته شد، اما به‌دلیل گستردگی استفاده از پایتون در حوزه‌ی داده و هوش مصنوعی، نسخه‌ی پایتونی آن با نام cv2 توسعه یافت.

OpenCV چیست و چرا در پایتون مهم است؟

OpenCV (مخفف Open Source Computer Vision Library) یک کتابخانه متن‌باز است که ابزارهای متنوعی برای کار با تصاویر و ویدیوها ارائه می‌دهد. با استفاده از آن می‌توان عملیات‌هایی مانند تشخیص چهره، شناسایی اشیا، فیلترگذاری، استخراج ویژگی‌ها و حتی آموزش مدل‌های هوش مصنوعی را انجام داد.

  • پشتیبانی از چند زبان برنامه‌نویسی (Python, C++, Java, MATLAB)
  • سازگار با پلتفرم‌های مختلف (Windows, macOS, Linux, Android, iOS)
  • مناسب برای کاربردهای بینایی ماشین، یادگیری عمیق و پردازش ویدیو

نصب OpenCV در پایتون

برای نصب OpenCV کافی است از ابزار pip استفاده کنید:

pip install opencv-python

در صورتی که قصد دارید از ماژول‌های اضافی مانند الگوریتم‌های پیشرفته استفاده کنید، نسخه‌ی opencv-contrib-python را نصب کنید:

pip install opencv-contrib-python

پس از نصب، می‌توانید با وارد کردن دستور زیر مطمئن شوید که کتابخانه به‌درستی نصب شده است:

import cv2
print(cv2.__version__)

این کد نسخه‌ی نصب‌شده‌ی OpenCV را چاپ می‌کند. اگر خطایی دریافت نکردید، کتابخانه به‌درستی نصب شده است.

خواندن و نمایش تصویر در OpenCV

برای شروع، باید یاد بگیرید که چگونه تصویر را بخوانید و نمایش دهید:

import cv2

image = cv2.imread('image.jpg')  # خواندن تصویر
cv2.imshow('My Image', image)    # نمایش تصویر
cv2.waitKey(0)                   # انتظار برای فشردن کلید
cv2.destroyAllWindows()          # بستن پنجره‌ها

در این مثال، cv2.imread() تصویر را از مسیر مشخص‌شده می‌خواند. سپس cv2.imshow() آن را در یک پنجره نمایش می‌دهد. تابع cv2.waitKey(0) باعث می‌شود برنامه تا زمانی که کلیدی فشرده نشود متوقف بماند.

نکته مهم:

اگر از Jupyter Notebook استفاده می‌کنید، توابع imshow به‌صورت پیش‌فرض عمل نمی‌کنند. در این حالت بهتر است از کتابخانه‌ی matplotlib برای نمایش استفاده کنید:

from matplotlib import pyplot as plt
import cv2

image = cv2.imread('image.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(image)
plt.show()

در اینجا با استفاده از cv2.cvtColor() فضای رنگی تصویر از BGR (که استاندارد OpenCV است) به RGB تبدیل می‌شود تا رنگ‌ها به‌درستی نمایش داده شوند.

تغییر اندازه، برش و ذخیره تصویر

import cv2

image = cv2.imread('image.jpg')

resized = cv2.resize(image, (400, 300))
cropped = image[50:200, 100:300]
cv2.imwrite('cropped.jpg', cropped)

در این کد:

  • cv2.resize() تصویر را به ابعاد جدید تغییر می‌دهد.
  • cropped بخشی از تصویر را با استفاده از برش (Slicing) جدا می‌کند.
  • cv2.imwrite() تصویر جدید را در فایل ذخیره می‌کند.

تبدیل تصویر به خاکستری (Grayscale)

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image', gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

تبدیل تصویر به خاکستری یکی از مهم‌ترین مراحل در پردازش تصویر است، زیرا بسیاری از الگوریتم‌های تشخیص ویژگی یا لبه فقط روی یک کانال شدت نور (Intensity) کار می‌کنند.

تشخیص لبه با الگوریتم Canny

edges = cv2.Canny(image, 100, 200)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

در این الگوریتم، دو آستانه (Threshold) مشخص می‌شود تا لبه‌ها شناسایی شوند. آستانه پایین برای لبه‌های ضعیف و آستانه بالا برای لبه‌های قوی است. ترکیب آن‌ها باعث می‌شود تنها لبه‌های مهم باقی بمانند.

رسم اشکال هندسی و نوشتن متن روی تصویر

import cv2
import numpy as np

image = np.zeros((400, 400, 3), dtype="uint8")

cv2.line(image, (0, 0), (400, 400), (255, 0, 0), 3)
cv2.rectangle(image, (50, 50), (200, 200), (0, 255, 0), 2)
cv2.circle(image, (300, 200), 50, (0, 0, 255), -1)
cv2.putText(image, 'OpenCV', (100, 350), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 2)

cv2.imshow('Shapes', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

در این مثال:

  • cv2.line() برای رسم خط استفاده شده است.
  • cv2.rectangle() و cv2.circle() به‌ترتیب مربع و دایره رسم می‌کنند.
  • cv2.putText() برای نوشتن متن روی تصویر استفاده می‌شود.

کار با ویدیو در OpenCV

import cv2

cap = cv2.VideoCapture(0)  # استفاده از دوربین

while True:
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow('Video Stream', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

این کد یک ویدیو زنده از وب‌کم نمایش می‌دهد. با فشار دادن کلید q برنامه متوقف می‌شود. پارامتر 0 نشان‌دهنده‌ی دوربین اصلی سیستم است، اما می‌توان مسیر فایل ویدیو را هم جایگزین کرد.

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

  • تشخیص چهره (Face Detection) با استفاده از مدل‌های Haar Cascade
  • ردیابی اشیا (Object Tracking) در ویدیوها
  • پیش‌پردازش داده‌ها برای شبکه‌های عصبی (Deep Learning)
  • تحلیل حرکتی (Motion Analysis) در ویدیوهای نظارتی
  • تلفیق با TensorFlow و PyTorch برای پروژه‌های یادگیری عمیق

بهترین روش‌ها (Best Practices) در استفاده از OpenCV

  • همیشه تصاویر را در فضای رنگی درست (BGR یا RGB) پردازش کنید.
  • از نسخه‌ی opencv-contrib-python برای الگوریتم‌های پیشرفته استفاده کنید.
  • برای کارایی بالاتر، از پردازش ناحیه‌ای (ROI Processing) به‌جای کل تصویر بهره ببرید.
  • در حلقه‌های ویدیویی، حتماً از cap.release() و destroyAllWindows() استفاده کنید تا منابع آزاد شوند.
  • در پروژه‌های یادگیری ماشین، از تبدیل‌های پیش‌پردازشی مانند GaussianBlur یا thresholding برای حذف نویز بهره بگیرید.

جمع‌بندی

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

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: