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

ممكن احد يشرح لي برنامج Opencv هذا ؟

بدأه مجلـد جديـد في 22 يونيو 2008 · 2 رد · 782 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هذا هو الcode

#include <cv.h>
#include <highgui.h>
#include <math.h>
int main( int argc, char** argv ) {
	CvPoint center;
	 double scale=-3;
	 IplImage* image = argc==2 ? cvLoadImage(argv[1]) : 0;
	 if(!image) return -1;
	 center = cvPoint(image->width/2,image->height/2);
   for(int i=0;i<image->height;i++)
	   for(int j=0;j<image->width;j++) {
		   double dx=(double)(j-center.x)/center.x;
		   double dy=(double)(i-center.y)/center.y;
		   double weight=exp((dx*dx+dy*dy)*scale);
		   uchar* ptr = 
&CV_IMAGE_ELEM(image,uchar,i,j*3);
		   ptr[0] = cvRound(ptr[0]*weight);
		   ptr[1] = cvRound(ptr[1]*weight);
		   ptr[2] = cvRound(ptr[2]*weight);  }
   cvSaveImage( "copy.png", image );
   cvNamedWindow( "test", 1 );
   cvShowImage( "test", image );
   cvWaitKey();
   return 0; 
}

قمت بتطبيق البرنامج ورأيت النتيجة ، وهي وضع لون اسود في الزوايا وعلى اطراف الصورة.

السؤال هو كيف قام بذلك ؟

#2

اين خبراء الجرافيكس ؟

السر هو داخل ال for-loops :

for(int i=0;i<image->height;i++)
	   for(int j=0;j<image->width;j++) {
		   double dx=(double)(j-center.x)/center.x;
		   double dy=(double)(i-center.y)/center.y;
		   double weight=exp((dx*dx+dy*dy)*scale);
		   uchar* ptr =
&CV_IMAGE_ELEM(image,uchar,i,j*3);
		   ptr[0] = cvRound(ptr[0]*weight);
		   ptr[1] = cvRound(ptr[1]*weight);
		   ptr[2] = cvRound(ptr[2]*weight);  }

ماذا تمثل القيمة داخل المتغير weight ؟

#3

لا استخدم هذه المكتبه !

لكن الواضح من الكود انه يعمل شئ شبية بالفلتر

يمر على جميع نقاط الصورة باللوبين الموجودة في الكود

بعد ذلك يطبق عليها معادلة رياضية

mimetex.cgi?3*e%5E%7Bx%5E2+y%5E2%7D
tvquran_6.gif

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