آشنایی و کار با opencv

saalek110

Well-Known Member
در تاپیک زیر ، در گوشی ، در سایت گوگل کلاب،....
تمرینات اولیه را با opencv انجام دادیم.



 

saalek110

Well-Known Member
OpenCV یکی از کتابخانه‌های بسیار معروف و قدرتمند برای پردازش تصویر و بینایی ماشینه. اجازه بده به ساده‌ترین شکل برات توضیح بدم:


---

OpenCV چیست؟

OpenCV (Open Source Computer Vision Library) یک کتابخانهٔ متن‌باز است که برای انجام پردازش‌های تصویری و ویدیویی، بینایی ماشین و حتی هوش مصنوعی کاربرد داره. با زبان‌های مختلفی می‌تونی ازش استفاده کنی، مثل Python، C++، Java، و...


---

کارهایی که می‌شه با OpenCV انجام داد:

خواندن و نمایش عکس یا ویدیو

فیلترگذاری روی تصویر (مثل مات کردن، تیز کردن، لبه‌یابی)

تشخیص چهره

شناسایی اشیاء

دنبال‌کردن حرکت‌ها در ویدیو

تشخیص رنگ‌ها یا شکل‌ها

و خیلی کارهای پیشرفته مثل تشخیص حرکت، ساخت ربات بینا و...
---

شروع ساده با پایتون

اگر موافقی، من می‌تونم مرحله‌به‌مرحله با پایتون راه بندازمت. مثلاً:

1. نصب OpenCV
2. باز کردن و نمایش یک تصویر
3. تبدیل تصویر رنگی به سیاه و سفید
4. اعمال فیلترها
 

saalek110

Well-Known Member
خیلی هم خوب. پس اجازه بده بر اساس دسته‌بندی، توابع و دستورات مهم OpenCV رو با توضیح‌های ساده معرفی کنم، بدون نیاز به اجرای کد:




1. خواندن و نوشتن تصویر


  • cv2.imread(path)
    خواندن تصویر از فایل. خروجی یک ماتریس (آرایه) از پیکسل‌هاست.
  • cv2.imwrite(filename, image)
    ذخیره‌کردن تصویر در فایل.
  • cv2.imshow(window_name, image)
    نمایش تصویر در یک پنجره.
  • cv2.waitKey(delay)
    منتظر می‌ماند تا کلیدی فشار داده شود. معمولاً برای توقف پنجرهٔ تصویر استفاده می‌شود.
  • cv2.destroyAllWindows()
    بستن همه پنجره‌های نمایشی.



2. تغییر اندازه و بریدن


  • cv2.resize(image, (width, height))
    تغییر اندازه تصویر.
  • cropped = image[y1:y2, x1:x2]
    بریدن بخشی از تصویر با اندیس‌گذاری آرایه‌ای.



3. تبدیل رنگ‌ها


  • cv2.cvtColor(image, code)
    تبدیل رنگ بین فضاهای مختلف، مثل:
    • cv2.COLOR_BGR2GRAY (سیاه‌وسفید)
    • cv2.COLOR_BGR2RGB
    • cv2.COLOR_BGR2HSV



4. فیلترها و بلور


  • cv2.GaussianBlur(image, (ksize, ksize), sigma)
    بلور گوسی (نرم‌کردن تصویر).
  • cv2.medianBlur(image, ksize)
    بلور مدین.
  • cv2.blur(image, (ksize, ksize))
    بلور ساده.



5. لبه‌یابی و شناسایی شکل


  • cv2.Canny(image, threshold1, threshold2)
    تشخیص لبه‌ها با الگوریتم Canny.
  • cv2.findContours(image, mode, method)
    یافتن کانتور (مرز) شکل‌ها.
  • cv2.drawContours(image, contours, -1, color, thickness)
    رسم مرزها روی تصویر.



6. نوشتن و کشیدن روی تصویر


  • cv2.line(img, pt1, pt2, color, thickness)
    خط کشیدن.
  • cv2.rectangle(img, pt1, pt2, color, thickness)
    کشیدن مستطیل.
  • cv2.circle(img, center, radius, color, thickness)
    کشیدن دایره.
  • cv2.putText(img, text, position, font, fontScale, color, thickness)
    نوشتن متن روی تصویر.



7. عملیات ماتریسی و منطقی روی تصویر


  • cv2.bitwise_and(img1, img2)
    ترکیب تصویرها با عملگر AND.
  • cv2.bitwise_or(img1, img2)
    ترکیب با OR.
  • cv2.bitwise_not(img)
    نگاتیو کردن تصویر.



8. تشخیص چهره و اشیاء


  • cv2.CascadeClassifier(xml_file)
    بارگذاری طبقه‌بند Haar برای تشخیص چهره.
  • classifier.detectMultiScale(image, scaleFactor, minNeighbors)
    پیدا کردن نواحی چهره.



اگه بخوای می‌تونم برای هر بخش یه مثال هم به صورت غیرعملی بنویسم، یا اینکه وارد بخش‌های پیشرفته‌تری مثل پردازش ویدیو، ردیابی اشیاء، یا بینایی سه‌بعدی بشیم. کدومو دوست داری ادامه بدیم؟
 

saalek110

Well-Known Member
Python:
# نصب opencv در Google Colab
!pip install opencv-python-headless

# وارد کردن کتابخانه‌ها
import cv2
import numpy as np
from matplotlib import pyplot as plt

# ایجاد یک تصویر خالی (سیاه)
image = np.zeros((400, 400, 3), dtype=np.uint8)

# رسم دایره روی تصویر
center = (200, 200)         # مرکز دایره
radius = 100                # شعاع
color = (0, 255, 0)         # رنگ سبز (BGR)
thickness = 3               # ضخامت خط

cv2.circle(image, center, radius, color, thickness)

# نمایش تصویر با matplotlib (سازگار با Colab)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(image_rgb)
plt.axis('off')
plt.title('Circle with OpenCV')
plt.show()

کد رسم دایره در گوگل کلاب. اگر با گوگل کلاب آشنایی ندارید ، تاپیک پردازش تصویر با گوشی را ببینید.

سالک: من کد بالا را در گوگل کلاب اجرا کردم و دایره ای سبز ساخته شد.

Screenshot_۲۰۲۵-۰۵-۱۵_۱۸۴۷۲۶.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
کد نوشتن یک متن، بدون نصب opencv ، چون در پست قبلی کد نصب را داده بودیم:



Python:
import cv2
import numpy as np
from matplotlib import pyplot as plt

# ایجاد یک تصویر خالی (سفید)
image = np.ones((400, 600, 3), dtype=np.uint8) * 255

# متن، موقعیت و تنظیمات قلم
text = "Hello, OpenCV!"
position = (50, 200)  # مختصات شروع متن (x, y)
font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 2
color = (255, 0, 0)  # رنگ آبی (BGR)
thickness = 3

# نوشتن متن روی تصویر
cv2.putText(image, text, position, font, font_scale, color, thickness)

# نمایش تصویر با matplotlib
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(image_rgb)
plt.axis('off')
plt.title('Text on Image')
plt.show()

Screenshot_۲۰۲۵-۰۵-۱۵_۱۸۴۷۳۶.jpg
 

saalek110

Well-Known Member
معرفی یک خطا:

IndentationError: unexpected indent

شرح:
این خطا یعنی یکی از خطوط کد توی برنامه‌ات، بیشتر یا کمتر از حد معمول فاصله (indent) داره. در پایتون خیلی مهمه که فاصله‌ها درست باشه.


برای اینکه دقیق‌تر کمکت کنم، لطفاً کد کامل یا قسمتی که خطا می‌ده رو برام بفرست.


اما چند نکته کلی که معمولاً باعث این خطا می‌شه:


  • مخلوط کردن فاصله (space) و تب (tab) در یک بلوک کد
  • شروع یک خط با فاصله اضافی یا کمتر از بقیه خط‌ها
  • کدهای تو در تو که فاصله‌شون هماهنگ نیست

مثلاً این کد مشکل داره:
Python:
def func():
   print("hi")
    print("hello")  # این خط فاصله‌اش بیشتره و باعث خطا می‌شه

و باید درست بشه به شکل:
Python:
def func():
    print("hi")
    print("hello")


اگر دوست داری، کد خودت رو بفرست تا دقیق بگم کجاش مشکل داره و چطوری درستش کنی.
 
آخرین ویرایش:

saalek110

Well-Known Member
تشخیص لبه با الگوریتم canny

Python:
import cv2
import numpy as np
from matplotlib import pyplot as plt

# ساخت یک تصویر ساده با شکل‌ها
image = np.zeros((400, 400), dtype=np.uint8)
cv2.rectangle(image, (50, 50), (350, 350), 255, -1)   # مربع سفید پر شده
cv2.circle(image, (200, 200), 100, 0, -1)             # دایره سیاه توخالی وسط مربع

# اجرای تشخیص لبه‌ها با Canny
edges = cv2.Canny(image, threshold1=100, threshold2=200)

# نمایش تصویر اصلی و تصویر لبه‌ها کنار هم
plt.figure(figsize=(10,5))
plt.subplot(1,2,1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis('off')

plt.subplot(1,2,2)
plt.imshow(edges, cmap='gray')
plt.title('Canny Edges')
plt.axis('off')

plt.show()


Screenshot_۲۰۲۵-۰۵-۱۵_۱۹۱۸۱۳.jpg
 

saalek110

Well-Known Member
کلا opencv چه کارهایی می تونه انجام بدهد؟

سؤال خیلی خوبی پرسیدی!
کتابخانه OpenCV (Open Source Computer Vision Library) یکی از قوی‌ترین ابزارها برای بینایی ماشین و پردازش تصویر است.
در ادامه، مهم‌ترین کارهایی که OpenCV می‌تواند انجام دهد را دسته‌بندی‌شده برات می‌نویسم:


---

۱. پردازش تصویر (Image Processing)

تبدیل رنگ‌ها (RGB، BGR، Gray، HSV و ...)

تغییر اندازه، برش، چرخش و آینه‌ای کردن تصویر

اعمال فیلترها: بلور، شارپ، لبه‌گیری (مثل Canny)

ترکیب یا جدا کردن کانال‌های رنگی



---

۲. تشخیص ویژگی‌ها (Feature Detection)

تشخیص لبه‌ها (Canny)

تشخیص خطوط (HoughLines) و دایره‌ها (HoughCircles)

تشخیص گوشه‌ها (Corners)

تطبیق ویژگی بین دو تصویر (مثل SIFT، ORB، SURF)



---

۳. تشخیص اشیاء و چهره

تشخیص چهره با Haar Cascades یا DNN

تشخیص حرکت یا حضور انسان

تشخیص شماره پلاک، دست، چشم، دهان و غیره



---

۴. بینایی ماشینی (Machine Vision)

ردیابی اشیاء در ویدیو

شمارش اشیاء

پیدا کردن اشیاء خاص با الگو



---

۵. کار با ویدیو و دوربین

خواندن فایل‌های ویدیویی یا تصویر از دوربین

نوشتن و ذخیره ویدیو

تشخیص فریم به فریم



---

۶. بینایی سه‌بعدی و هندسی

عمق‌سنجی، Stereo Vision

تشخیص و اصلاح اعوجاج دوربین (Calibration)

محاسبه ماتریس دوربین، نرمال‌سازی و تبدیل پرسپکتیو



---

۷. کار با متون و بارکد

تشخیص متن (با کمک OCR مثل Tesseract)

خواندن بارکد و QR کد (با ابزارهای جانبی)



---

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




 

جدیدترین ارسال ها

بالا