الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعدة يا جماعة الخير (تحديد كرة زرقاء في الصورة) .

بدأه anas_aloklah في 2 نوفمبر 2012 · 2 رد · 1,208 مشاهدة · في الذكاء الاصطناعي وتطبيقاته
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مساعدة من فضلكم أنا عندي مشروع وهوا أن تقوم الكاميرة بتحديد كرة زرقاء وتصبح تتحرك الكاميرة بحركة الكرة قرأت خورزمية تحديد الوجوه هذه

http://www.codeproject.com/Articles/39060/Face-Detection-in-C

وفهمتها جيداً و استفدت من بعض الأفكار بها لكن ما أريده خورزمية أسرعة

الي استفدت منه هو أن حولت من RGB إلى cb وبهذا الشكل أصبح اللون الزرق بارز بالأبيض

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

ومشكور لمن يساعدني

#2

السلام عليكم ...

  1. أخي anas يرجى اختيار عنوان مناسب للموضوع ,(تم التعديل) .
  2. عندي هذا الكود (cpp) استخدمته لإيجاد طول و عرض (و بالتالي مستطيل) لحرف (عربي أو إنكليزي) مكتوب بخط أسود ضمن صورة بيضاء .
  3. الفكرة بسيطة تعتمد على مسح كل البكسلات في الصورة و إيجاد البكسل الأسود في أقصي اليمين و أقصى اليسار و في الأعلى و الأسفل .
  4. void CalcHeightWidth()
    {
    	// طريقة الحساب تعمتمد على أيجاد البكسل الأسود أقصى اليمين و أقصى اليسار و في الأعلى و الأسفل
    	// ثم نوجد الفرق بين هذه البكسلات لإيدا الطول و العرض
    
    	//القيم البدائية للمتحولات
    
    	int minX = img.width  ; // نفرض أن أصغر بكسل هو البكسل أقصى اليمين
    	int maxX = -1;// نفرض أن أكبر بكسل علة المحور إكس هو في الموقع ناقص واحد
    	int minY = img.height ; // نفرض أن أصغر بكسل شاقولي هو البكسل الموجود في الأسفل
    	int maxY = -1 ;// نفرض ان أكبر بكسل على المحور العمودي هو في الموقع ناقص واحد
    	for (int i=0;i< img.width;i++) // حلقة تكرارية على الأسطر و الاعمدة لتمسح  ك البكسلات في مصفوفة البكسلات
    		for (int j=0;j<img.height;j++)
    		{				
    			if (ArrayOfPixels[j].color == 0) // إذا كان البكسل أسود
    			{
    
    				if(i < minX) // هل البكسل أصغر من أصغر بكسل لدينا على المحور إكس
    					minX = i ;// إذا يصبح هو أصغر بكسل
    
    				if(i > maxX)// هل البكسل أكبر من أكبر بكسل على المحور إكس
    					maxX = i;// إذا يصبح هو أكبر بكسل على المحور غكس
    
    				if(j < minY) // هل البكسل أصغر من أصغر بكسل على المحور العمودي
    					minY = j ;// إذا  يصبه هو أصغر بكسل
    
    				if(j > maxY)// هل البكسل أكبر من أكبر بكسل على المحور العمودي
    					maxY = j;// إذا يصبح هو أكبر من أكبر بكسل على المحور الشاقولي
    
    			}
    		}
    		if( minX == img.width  ||  maxX == -1 ||  minY == img.height  || maxY == -1) // نفحص هل تغييرات القيم البدائية للمتحولات
    		{
    			nWidthLetter = 0; // إذا تكون الصورة لا تحوي أي حرف
    			nHeightLetter = 0;
    		}
    		else
    		{
    			nWidthLetter = maxX - minX + 1; // عرض الحرف هو الفرق بين البكسل في أقصى اليمين و أقصى اليسار على المحور إكس
    			nHeightLetter = maxY - minY + 1;//طول الحرف هو الفرق بين البكسل الأعلى الأسود و البكسل الأدنى الأسود على المحور الشاقولي
    		}
    		HeightWidthRatio = (float)nHeightLetter / (float)nWidthLetter ; // نحسب نسبة ارتفاع الحرف إلى عرضه  التس سنستخدمها في معادلة المسافة
    }

  5. اتمنى أن يكون مفيدا .
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3
houssam11350_11350 كتب:

السلام عليكم ...

  1. أخي anas يرجى اختيار عنوان مناسب للموضوع ,(تم التعديل) .
  2. عندي هذا الكود (cpp) استخدمته لإيجاد طول و عرض (و بالتالي مستطيل) لحرف (عربي أو إنكليزي) مكتوب بخط أسود ضمن صورة بيضاء .
  3. الفكرة بسيطة تعتمد على مسح كل البكسلات في الصورة و إيجاد البكسل الأسود في أقصي اليمين و أقصى اليسار و في الأعلى و الأسفل .
  4. void CalcHeightWidth()
    {
    	// طريقة الحساب تعمتمد على أيجاد البكسل الأسود أقصى اليمين و أقصى اليسار و في الأعلى و الأسفل
    	// ثم نوجد الفرق بين هذه البكسلات لإيدا الطول و العرض
    
    	//القيم البدائية للمتحولات
    
    	int minX = img.width  ; // نفرض أن أصغر بكسل هو البكسل أقصى اليمين
    	int maxX = -1;// نفرض أن أكبر بكسل علة المحور إكس هو في الموقع ناقص واحد
    	int minY = img.height ; // نفرض أن أصغر بكسل شاقولي هو البكسل الموجود في الأسفل
    	int maxY = -1 ;// نفرض ان أكبر بكسل على المحور العمودي هو في الموقع ناقص واحد
    	for (int i=0;i< img.width;i++) // حلقة تكرارية على الأسطر و الاعمدة لتمسح  ك البكسلات في مصفوفة البكسلات
    		for (int j=0;j<img.height;j++)
    		{				
    			if (ArrayOfPixels[j].color == 0) // إذا كان البكسل أسود
    			{
    
    				if(i < minX) // هل البكسل أصغر من أصغر بكسل لدينا على المحور إكس
    					minX = i ;// إذا يصبح هو أصغر بكسل
    
    				if(i > maxX)// هل البكسل أكبر من أكبر بكسل على المحور إكس
    					maxX = i;// إذا يصبح هو أكبر بكسل على المحور غكس
    
    				if(j < minY) // هل البكسل أصغر من أصغر بكسل على المحور العمودي
    					minY = j ;// إذا  يصبه هو أصغر بكسل
    
    				if(j > maxY)// هل البكسل أكبر من أكبر بكسل على المحور العمودي
    					maxY = j;// إذا يصبح هو أكبر من أكبر بكسل على المحور الشاقولي
    
    			}
    		}
    		if( minX == img.width  ||  maxX == -1 ||  minY == img.height  || maxY == -1) // نفحص هل تغييرات القيم البدائية للمتحولات
    		{
    			nWidthLetter = 0; // إذا تكون الصورة لا تحوي أي حرف
    			nHeightLetter = 0;
    		}
    		else
    		{
    			nWidthLetter = maxX - minX + 1; // عرض الحرف هو الفرق بين البكسل في أقصى اليمين و أقصى اليسار على المحور إكس
    			nHeightLetter = maxY - minY + 1;//طول الحرف هو الفرق بين البكسل الأعلى الأسود و البكسل الأدنى الأسود على المحور الشاقولي
    		}
    		HeightWidthRatio = (float)nHeightLetter / (float)nWidthLetter ; // نحسب نسبة ارتفاع الحرف إلى عرضه  التس سنستخدمها في معادلة المسافة
    }

  5. اتمنى أن يكون مفيدا .

شكراً أخي خورزميتك فكرت بها لكنها لا تنفع معي بسبب وجود نقط مبعثرة قد تظهر

ولكن الحل كان بسيط باستخدام المتوسط الحسابي

لكني ما زلت محتاج لبعض معالجة الحالات الخاصة

لكن النائج كانت لا بأس بها إلى الآن

وشكراً مرة أخرى

تم تعديل هذه المشاركة بواسطة anas_aloklah في 3 نوفمبر 2012 في 00:45

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…