كشف المستطيلات السوداء على خلفية منقوشة باستخدام بايثون
تعتبر تقنية كشف الأشكال من التطبيقات الهامة في مجال معالجة الصور، حيث تتيح لمستخدميها إمكانية التعرف على الأشكال المحددة والتحليل الدقيق لها. وفي هذا المقال، سوف نتناول كيفية استخدام مكتبة OpenCV في بايثون لاكتشاف المستطيلات السوداء المملوءة على خلفية مزخرفة. سنتناول التحديات التي قد نواجهها خلال عملية الكشف وكيفية تحسين النتائج.
أهمية OpenCV في معالجة الصور
تعتبر OpenCV واحدة من المكتبات الأكثر استخدامًا في معالجة الصور والرؤية الحاسوبية. توفر هذه المكتبة مجموعة واسعة من الوظائف والأدوات التي تتيح للمطورين معالجة الصور بكفاءة. من بين التطبيقات الشائعة لمكتبة OpenCV هو كشف الأشكال، كالمستطيلات السوداء المملوءة في مقالنا اليوم.
التحديات في كشف المستطيلات السوداء
عند محاولة الكشف عن المستطيلات السوداء على خلفية مزخرفة، قد تواجه عدة صعوبات. أولاً، قد يتم اكتشاف الخطوط الموجودة في الخلفية ككائنات، مما يؤدي إلى ازدواجية في النتائج. ثانيًا، قد تتداخل المستطيلات أو تلامس الزوايا، مما يجعل الكشف عنها بشكل منفصل أمرًا صعبًا. لذلك يجب استخدام تقنيات محددة لتحسين الكشف.
تطبيق عملية الكشف باستخدام OpenCV
لبداية عملية الكشف، يمكن استخدام الأكواد التالية. أولاً، نقوم باستيراد المكتبات اللازمة:
import numpy as np import cv2
ثم نقوم بتحميل الصورة المراد تحليلها:
image = cv2.imread("page.jpg") result = image.copy()
بعد ذلك، نقوم بتحويل الصورة إلى تدرجات الرمادي
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ثم نستخدم تقنية العتبة التكيفية لإنشاء صورة ثنائية:
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 51, 9)
بعد إجراء العتبة، نقوم باكتشاف الكنتورات في الصورة:
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnts = cnts[0]
عند هذه النقطة، يمكننا رسم الكنتورات المكتشفة على الصورة الأصلية:
for c in cnts: cv2.drawContours(thresh, [c], -1, (255, 255, 255), -1)
لتقليل التداخل بين الكنتورات، يمكن إجراء عمليات مورفولوجية على الصورة، مثل الفتح:
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=4)
بعد ذلك، يمكننا إعادة اكتشاف الكنتورات في الصورة المعالجة:
cnts = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnts = cnts[0]
وأخيرًا، نقوم بوضع مستطيلات حول كل مستطيل مكتشف:
for c in cnts: x, y, w, h = cv2.boundingRect(c) cv2.rectangle(image, (x, y), (x + w, y + h), (36, 255, 12), 3)
نتائج عملية الكشف
يمكن ملاحظة أن النتائج تظهر المستطيلات المملوءة بشكل منفصل، رغم أنه في الحالات التي تلامس فيها المستطيلات الزوايا، قد يصعب التحديد بشكل مثالي. لذا فإن تحسين عملية الكشف يعتمد على التأكد من أن كل مستطيل يتم اكتشافه بشكل منفصل، مما يسهل تحليل البيانات اللاحقة.
استنتاجات وتحسينات مستقبلية
تكمن أهمية استخدام OpenCV في معالجة الصور لمثل هذه التطبيقات في قدرتها على تقديم حلول فعالة وسريعة. كما يجب دائماً البحث عن طرق لتحسين الخوارزميات المستخدمة في الكشف عن الأشكال، سواء باستخدام فلاتر إضافية أو تقنيات تعلم الآلة لتحسين الدقة. يمكن اعتبار هذه العملية جزءاً من رحلة تعلم مستمرة تستفيد من التطورات في مجال معالجة الصور.
إذا كنت مهتمًا في تجربة العمل باستخدام OpenCV للكشف عن المستطيلات السوداء، فإن هذه الخطوات يمكن أن تشكل نقطة انطلاق جيدة لمشاريع أكثر تعقيداً. تذكر دائمًا أن تجريب تقنيات مختلفة قد يوفر نتائج أفضل ويعزز من فرص نجاح المشروع. تعتبر عملية كشف المستطيلات السوداء المملوءة على خلفية مزخرفة مثالاً جيدًا على كيفية استخدام التكنولوجيا الحديثة لحل المشكلات اليومية.