البرمجة

تحديد وإزالة الـContours الداخلية في OpenCV باستخدام Python

في عالم معالجة الصور باستخدام لغة البرمجة Python ومكتبة OpenCV، يأتي تحديد وإزالة التفاصيل غير المرغوب فيها داخل تفاصيل أكبر كتحدّي يواجه المطورين. يمكنك تحقيق ذلك باستخدام مجموعة من الخطوات المتسلسلة في الكود.

أولاً وقبل كل شيء، يتم استخدام دالة cv2.findContours للعثور على الcontours في الصورة الثنائية (binary_image). تمثل هذه الcontours الهياكل الضوء والظل في الصورة. ومن ثم يتم تحديد المستطيل المحيط بكل contour باستخدام cv2.boundingRect.

لحذف التفاصيل الداخلية غير المرغوب فيها، يمكننا استخدام معلومات التسلسلية التي توفرها متغيرات regions و hierarchy. يتيح لنا هذا البيان الهرمي استكشاف العلاقات بين contours بمستويات مختلفة.

لحذف الcontours الداخلية، يمكننا فحص التسلسل (hierarchy) لكل contour. إذا كانت قيمة العنصر المقابل للcontour تشير إلى وجود contour داخلي، فيمكننا استبعاده من القائمة.

في النهاية، يتم رسم المستطيلات الناتجة على الصورة الأصلية (image) باستخدام cv2.rectangle. يجسد هذا الكود العملية الكاملة لتحديد وإزالة الcontours الداخلية غير المرغوب فيها.

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

المزيد من المعلومات

عند التعامل مع مشكلة تحديد وإزالة الـcontours الداخلية في مكتبة OpenCV باستخدام لغة البرمجة Python، يمكن أن يكون تحقيق الهدف أمرًا قد يتطلب فهمًا أعمق لبعض المفاهيم والطرق المتقدمة.

لتوضيح أكثر، يمكنك النظر في استخدام خاصية الـHierarchy التي تُرجعها دالة cv2.findContours. تلك الخاصية توفر لك معلومات حول العلاقات الهرمية بين contours المكتشفة. على سبيل المثال، إذا كان لديك contour داخلي، فإن قيمة الـhierarchy المقابلة له ستكون [التالي، السابق، أول فرع، فرع الأب]. إذا كان التالي (Next) هو -1، فهذا يعني أنه ليس هناك contour داخلي.

لتحقيق هذا، يمكنك تعديل الكود كالتالي:

python
for i, region in enumerate(regions): x, y, w, h = cv2.boundingRect(region) # استخدام معلومات hierarchy next_contour, prev_contour, first_child, parent_contour = hierarchy[0][i] # إذا كان ليس هناك contour داخلي if next_contour == -1: cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 1)

هنا، نستخدم enumerate للحصول على الفهرس (index) لكل contour مع المعلومات المتعلقة بالتسلسل (hierarchy). يتم فحص قيمة next_contour لتحديد ما إذا كان هناك contour داخلي أم لا.

يُشدد على أهمية فهم تفصيلات الـHierarchy للتحكم في العلاقات بين contours. هذا يسمح لك بالتعامل بشكل أكثر دقة مع هيكل الصورة وإزالة الـcontours غير المرغوب فيها بشكل فعّال.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر