جدول المحتويات:

اكتشاف اللون في Python باستخدام OpenCV: 8 خطوات
اكتشاف اللون في Python باستخدام OpenCV: 8 خطوات

فيديو: اكتشاف اللون في Python باستخدام OpenCV: 8 خطوات

فيديو: اكتشاف اللون في Python باستخدام OpenCV: 8 خطوات
فيديو: How to detect Color from Image using Python 2024, يوليو
Anonim
Image
Image

أهلا! تُستخدم هذه التعليمات للتوجيه حول كيفية استخراج لون معين من صورة في لغة python باستخدام مكتبة openCV. إذا كنت جديدًا على هذه التقنية ، فلا داعي للقلق ، ففي نهاية هذا الدليل ستتمكن من برمجة برنامج الكشف عن الألوان الخاص بك.

فيما يلي الوظائف أو يمكننا أن نقول التقنيات التي ستتعلمها ،

1. كيف تقرأ صورة

2. كيفية إنشاء أشرطة المسار

3. كيفية ضبط قيمة تدرج اللون والتشبع وقيمة الصورة باستخدام أشرطة المسار

4. وبعد ذلك سيكون هناك ناتجك النهائي

يمكنك مشاهدة فيديو الإخراج الذي أرفقته أدناه.

لذلك دعونا نبدأ

اللوازم

  • بايثون 3
  • مكتبة openCV
  • مكتبة numpy

الخطوة 1: استيراد المكتبات

استيراد مكتبات
استيراد مكتبات

الصورة فيراري صفراء كما هو موضح وسنبرمج لاستخراج اللون الأصفر فقط من تلك الصورة

ستكون الخطوة الأولى هي استيراد مكتباتنا

1. بما في ذلك مكتبة OpenCV. يطلق عليه cv2 في بيثون

2. بما في ذلك مكتبة numpy مثل np. تسمح لنا كلمة "as" باستخدام numpy كـ np ، لذا لا داعي لكتابة numpy مرارًا وتكرارًا

الخطوة 2: إنشاء أشرطة المسار

إنشاء أشرطة المسار
إنشاء أشرطة المسار

يتم إنشاء أشرطة المسار لضبط قيمة تدرج اللون والتشبع والقيمة في صورة ما.

cv2.itledWindow ("TrackBars") يتم استخدام هذا السطر من التعليمات البرمجية لإنشاء نافذة إخراج جديدة ويتم إعطاء اسم النافذة كـ TrackBars (يمكنك إعطاء أي اسم تريده)

cv2.resizeWindow ("TrackBars"، 600، 250) تُستخدم هذه الوظيفة لتغيير حجم النافذة. "TrackBars" هي النافذة التي تريد تغيير حجمها منذ أن أردت تغيير حجم نافذة TrackBars لقد كتبت هذا الاسم. يليه عددان صحيحان. هذان العددان الصحيحان هما العرض والارتفاع. يمكنك اللعب بهذين الرقمين لتغيير الحجم

الخطوة 3: إنشاء TrackBars للتدرج والتشبع والقيمة

إنشاء أشرطة المسار للصبغة والتشبع والقيمة
إنشاء أشرطة المسار للصبغة والتشبع والقيمة
إنشاء أشرطة المسار للصبغة والتشبع والقيمة
إنشاء أشرطة المسار للصبغة والتشبع والقيمة

سنقوم الآن بإنشاء 6 أشرطة تراكبارس إجمالية للتدرج والتشبع والقيمة. سيكون لكل منها اثنان ، أي 1 كحد أدنى و 1 كحد أقصى. سنستخدم وظيفة createTrackbar من OpenCV. أولاً سنرى صيغة هذه الوظيفة.

cv2.createTrackbar ("WINDOWNAME" ، "MAINWINDOWNAME" ، "RANGE"). قد يكون هذا محيرًا ولكن لا تقلق ، فسنخوض في كل خطوة. ضع في اعتبارك شيئًا واحدًا أنه في قيم openCV للألوان هي 179 ، والتشبع هو 255 والقيمة 255

1. إنشاء TrackBar لـ hue min:

cv2.createTrackbar ("Hue min"، "TrackBars"، 0، 179، فارغ)

في Hue min هذا هو اسم شريط التتبع ، TrackBars هو النافذة الرئيسية ، 0 هو الموضع الذي سيكون فيه شريط التمرير و 179 هو النطاق الذي يعني أن الصامت سينتقل من 0-179

2. إنشاء TrackBar لـ hue max:

cv2.createTrackbar ("Hue max" ، "TrackBars" ، 179 ، 179 ، فارغ)

في Hue max هو اسم شريط التتبع ، TrackBars هو النافذة الرئيسية ، 179 هو الموضع الذي سيكون فيه شريط التمرير و 179 هو النطاق الأقصى يعني أن الصامت سينتقل من 179-0

3. كرر الخطوات بالمثل مع sat min و sat max و val min و val max كما هو موضح في الصورة

الصورة ذات الخلفية البيضاء هي صورة الإخراج. هكذا ستبدو أشرطة المسار الخاصة بك

الخطوة 4: كيفية قراءة الصورة وتغيير حجمها

كيف تقرأ وتغير حجم الصورة
كيف تقرأ وتغير حجم الصورة

cv2.imread () يسمح لك بقراءة الصورة. من الأمور المهمة أنك بحاجة إلى أن تضع في اعتبارك أن موقع صورتك يجب أن يكون في نفس المجلد حيث تم حفظ البرنامج. سنضع حلقة while لأنه يجب تشغيلها حتى قراءة الصورة أو يمكننا القول حتى يصبح الشرط صحيحًا

img = cv2.imread ("ferrari.jpg")

  • في هذا قمت بإنشاء اسم متغير "img" حيث أقوم بتخزين الصورة
  • داخل cv2.imread ، اكتب اسم الصورة بامتدادها داخل علامة اقتباس مزدوجة

لتغيير حجم الصورة ، سنستخدم وظيفة cv2.resize. هذا الجزء اختياري ، إذا كنت تريد تغيير الحجم ، فيمكنك استخدام هذه الوظيفة

داخل cv2.resize ، اكتب أولاً اسم المتغير الذي يتم تخزين الصورة به ثم عرضه وارتفاعه

الخطوة 5: قراءة قيم شريط المسار لتطبيقها على صورة

قراءة قيم شريط المسار لتطبيقها على صورة
قراءة قيم شريط المسار لتطبيقها على صورة
قراءة قيم شريط المسار لتطبيقها على صورة
قراءة قيم شريط المسار لتطبيقها على صورة

حسنًا ، سنقوم الآن بقراءة قيم شريط التتبع حتى نتمكن من تطبيقها على صورتنا. سنحصل على القيم باستخدام دالة cv2.getTrackbarPos ().

لنبدأ بهذا الجزء …

h_min = cv2.getTrackbarPos ("Hue min"، "TrackBars")

في البيان أعلاه ، أقوم بإنشاء اسم متغير h_min حيث سأخزن قيمة Hue min. لذا داخل cv2.getTrackbarPos ستكون الوسيطة الأولى هي "Hue min" لأنني أريد قيم hue min (يجب أن تكون الهجاء هي نفسها تمامًا مثل وظيفة createTrackbar) وستكون الوسيطة الثانية هي اسم نافذة شريط التتبع التي تنتمي إليها.

  • كرر نفس العملية لـ h_max وبقية الوظائف كما هو موضح في الصورة أعلاه ثم قم بطباعة جميع القيم باستخدام print ()
  • يظهر الإخراج في الصورة الثانية. تقوم بطباعة قيم h_min ، h_max ، s_min ، s_max ، v_min ، s_max

الخطوة 6: عرض الصورة وتحديد الحد العلوي والسفلي

عرض الصورة وتحديد الحد العلوي والسفلي
عرض الصورة وتحديد الحد العلوي والسفلي

الآن لدينا الحد الأدنى والحد الأقصى لقيمة الصبغة والتشبع والقيمة ، سنستخدم هذه القيمة لتصفية الصورة حتى نتمكن من إخراج اللون المحدد للصورة.

سننشئ قناعًا لهذا باستخدام وظيفة cv2.inRange. وقبل ذلك سنقوم بتعيين الحد الأعلى والأدنى من اللون والتشبع والقيمة

لذا ، قم بإنشاء اسم متغير "Lower" واستخدم دالة مصفوفة numpy حدّد نطاق min لجميع الثلاثة على النحو التالي

low = np.array ([h_min، s_min، v_min])

كرر نفس الخطوة للجزء العلوي

upper = np.array ([h_max، s_max، v_max])

الآن سنقوم بإنشاء قناع على النحو التالي

mask = cv2.inRange (تغيير الحجم ، أدنى ، أعلى) داخل cv2.inRang ستكون الوسيطة الأولى هي المتغير الذي يتم تخزين صورتي النهائية فيه ، وستكون الوسيطة الثانية هي الحد الأدنى والوسيطة الثالثة ستكون الحد الأعلى.

الآن سنقوم بعرض الصورة الرئيسية والقناع. للعرض سنستخدم الدالة cv2.imshow ()

cv2.imshow ("img" ، تغيير الحجم) هذا لعرض الصورة الرئيسية. الوسيطة الأولى هي اسم النافذة التي يمكنك إعطاء أي اسم تريدها والوسيطة الثانية متغيرة حيث يتم تخزين صورتي الرئيسية التي تريد عرضها.

كرر الخطوات بالمثل للقناع

cv2.imshow ("الإخراج" ، قناع)

الخطوة 7: الآن الخطوة النهائية

الآن الخطوة النهائية
الآن الخطوة النهائية

في هذه الخطوة الأخيرة سنقوم باستخراج لون السيارة وعرضها.

لقد قمت بإنشاء نتيجة اسم متغير. مرة أخرى يمكنك إعطاء أي اسم تريده. لذلك سنستخدم الدالة cv2.bitwise_and () التي سنضيف فيها إلى الصور معًا وننشئ صورة جديدة. وحيثما توجد وحدات البكسل في كلتا الصورتين ، فسيتم اعتبارها بنعم أو "1".

النتيجة = cv2.bitwise_and (تغيير الحجم ، تغيير الحجم ، القناع = القناع)

  • في هذه الحجة الأولى ستكون صورتنا
  • الوسيطة الثانية ستكون أيضًا صورتنا الأصلية ولكن متبوعة بالقناع المطبق الذي أنشأناه من قبل
  • وأخيراً فقط اعرض النتيجة باستخدام وظيفة imshow

فقط انسخ والصق هذه الخطوة الأخيرة ، إنها مجرد تأخير ويمكنك الخروج من نافذة الإخراج بالضغط على "أ" على لوحة المفاتيح

الخطوة 8: المخرجات النهائية

موصى به: