Hsv در opencv

saalek110

Well-Known Member
مقادیر HSV برای رنگ‌های مختلف

اگر می‌خواهید رنگ دیگری را هم امتحان کنید:

رنگ محدوده Hue (H) تقریبی
قرمز 0-10 و 170-179
نارنجی 11-25
زرد 26-35
سبز 36-85
آبی 86-130
بنفش 131-160
صورتی 161-169

نکات مهم برای مبتدیان

1. فضای HSV بهتر از RGB است چون:
· Hue (رنگ) جدا از روشنایی است
· تشخیص رنگ تحت شرایط نوری مختلف راحت‌تر است
2. محدوده Hue در OpenCV:
· بازه 0-179 (نه 0-360)
· چون در OpenCV با 8-bit کار می‌کنیم (360/2 ≈ 179)
3. سه پارامتر HSV:
· H: رنگ (0=قرمز، 60=زرد، 120=سبز، ...)
· S: خلوص رنگ (0=خاکستری، 255=خالص)
· V: روشنایی (0=تیره، 255=روشن)
 

saalek110

Well-Known Member
سالک: گیج شدم ، روشنایی چیه ؟ اصلا hsv چیه؟

هوش مصنوعی Deepseek:
سوال بسیار خوبی کردید! درست در نقطه‌ای که خیلی‌ها گیج می‌شوند. بگذارید با یک مثال روزمره توضیح بدهم.

HSV چیست؟ (خیلی ساده)

فرض کنید یک جعبه مداد رنگی دارید:

RGB (همان رنگ معمولی) HSV (نسخه هوشمندتر)
مثل این است که بگویید: "مداد با 30% آبی، 60% قرمز، 10% سبز" مثل این است که بگویید: "مداد زردِ روشنِ خالص"

HSV سه ویژگی را جدا می‌کند:

1. H (Hue) = رنگ اصلی - مثلاً زرد، قرمز، آبی
2. S (Saturation) = خلوص/شدت رنگ - رنگ پررنگ یا رنگ‌و‌رو رفته
3. V (Value) = روشنایی - تیره یا روشن

☀️ روشنایی (Value) دقیقاً چیست؟

روشنایی = میزان سفیدی یا سیاهی در رنگ

مثال از زندگی واقعی Value پایین (تیره) Value متوسط Value بالا (روشن)
رنگ آبی آبی نفتی (مثل شب) آبی آسمان آبی روشن (مثل آبی آسمان ظهر)
رنگ قرمز شرابی تیره قرمز معمولی صورتی (قرمز + سفید)
رنگ زرد زرد طلایی زرد معمولی زرد لیمویی/کرم

مقایسه RGB و HSV در تشخیص رنگ

بیایید ببینیم چرا برای تشخیص رنگ، HSV بهتر از RGB است:

مثال: تشخیص "قرمز" در شرایط مختلف


# در RGB ممکن است:
قرمز در نور آفتاب = (220, 50, 50)
قرمز در سایه = (120, 30, 30) # کاملاً متفاوت!
# تشخیص سخت است چون همه مقادیر تغییر کرده
```

# در HSV:
قرمز در نور آفتاب = (0, 200, 220) # H=قرمز، S=زیاد، V=زیاد
قرمز در سایه = (0, 200, 120) # H=قرمز، S=زیاد، V=کمتر
# فقط Value (روشنایی) تغییر کرده، رنگ (Hue) ثابت مانده!
```

HSV به صورت بصری:

```
رنگ‌های مختلف

Hue ←─┼─→ (360 درجه دایره رنگ)


Saturation (شدت رنگ):
خالص ← ● → خاکستری

Value (روشنایی):
روشن ← ● → تیره
```

چرا OpenCV از HSV استفاده می‌کند؟

مشکل در RGB راه‌حل با HSV
رنگ در نور متفاوت، مقادیر کاملاً مختلفی دارد فقط Value تغییر می‌کند، Hue ثابت می‌ماند
تشخیص رنگ قرمز از صورتی سخت است صورتی = قرمز با Value بالا
جداکردن رنگ از سایه مشکل است سایه = همان رنگ با Value پایین

مثال عملی: تشخیص "هر چیز زرد"

# در RGB: باید همه ترکیبات زرد را حدس بزنیم
# خیلی سخت!

# در HSV: خیلی راحت!
lower_yellow = [20, 100, 100] # هرچیزی با:
# Hue بین 20-30 (زرد)
# Saturation بالای 100 (پررنگ)
# Value بالای 100 (نسبتاً روشن)

upper_yellow = [30, 255, 255]
```

تمرین فکری:

1. یک لیمو را در نظر بگیرید:
· Hue = زرد (مثلاً 25)
· Saturation = بالا (پررنگ)
· Value = متوسط (نه خیلی روشن، نه خیلی تیره)
2. همان لیمو زیر نور چراغ:
· Hue = همان 25 (رنگ تغییر نکرد!)
· Saturation = همان بالا
· Value = بالاتر (روشن‌تر دیده می‌شود)
3. همان لیمو در سایه:
· Hue = همان 25
· Saturation = همان بالا
· Value = پایین‌تر (تیره‌تر)

پس می‌توانیم بگوییم:
HSV مثل این است که رنگ را با سه دکمه جداگانه کنترل کنیم:

1. دکمه انتخاب رنگ (Hue)
2. دکمه پررنگ/کمرنگ (Saturation)
3. دکمه روشن/خاموش (Value)

آیا الان مفهوم HSV و روشنایی واضح‌تر شد؟ اگر بخش خاصی هنوز مبهم است، بپرسید تا بیشتر توضیح دهم!
 

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

بالا