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

معالجة الصورة

بدأه fouad m في 26 فبراير 2011 · 4 رد · 1,301 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله وبركاته

أنا ادرس موضوع معالجة الصورة وأنا الآن في أمس الحاجة إلى برنامج بلغة دلفي 7 عن كيفية قراءة صورة ملونة وإظهارها باللون الأبيض و اسود مع الشرح المفصل لكيفية إنشاء البرنامج وباستعمال التعليمة التالية

(if f(x,y)<128 then f(x,y)=255 else f(x,y)=0

جزأكم الله خيرا

#2

أنا أنتظر أيضا ردوا أرجوكم

#3

ستحتاج إلى دالة f تعيد لون البيكسل الحالي في الصورة (تبعاً لموقعه x,y)

يمكنك استخدام الدالة colorToRGB التي تعيد قيمة لون البيكسل التي تمر عليه , ولكنك ستحتاج إلى أخذ الجذر التكعيبي لها حتى يمكنك مقارنتها برقم 128

لاحظ أنك ستحتاج الوحدتين Math و Graphics

إذا كان لابد إلا من استخدام التعليمة السابقة , فلا أعلم تحديداً كيف يمكنك جعل الدالة f تعيد قيمة اللون مرة , ثم تستخدمها لتعيين قيمته مرة أخرى .. ربما ستحتاج تعريفين للدالة .

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#4

عليكم السلام ورحمة الله

أولا اي صورة ؟ واي صيغة bmp/jpeg/png/tiff/... ؟

ثانيا فرضا الصورة معروضة بمكون TImage يمكن الحصول على الالوان باستدعاء getpixel راجع Help دلفي حولها

بالنسبة لتحويل اللون هناك معادلة بسيطة تجدها ببحث بسيط

بالتوفيق

d4baa0.gif
#5

وعليكم السلام ورحمة الله وبركاته

أبسط طريقة باستخدام Monochrome المتوفر في TBitmap

var
  b: TBitmap;
begin
  b := TBitmap.Create;
  b.Assign(Image1.Picture);
  b.Monochrome := True;
  Image1.Picture.Assign(b);
  b.Free;
end;

يمكنك كتابة إجراء مثل:

procedure BlackWhite(ImgSource, ImgDest: TImage; value: Byte = 127);
const
     RP = 0.2989;
     GP = 0.5866;
     BP = 1 - RP - GP;
var
  X, Y: Integer;
  P   : TColor;
  r,g,b: byte;
begin
   For X := 0 to ImgSource.Width do begin
    ImgDest.Repaint;
      For y := 0 to ImgSource.Height do begin
        P := ImgSource.Canvas.Pixels[X, Y];
        r := (P and $0000FF);
        g := (P and $00FF00) shr 8;
        b := (P and $FF0000) shr 16;
        if (Trunc(r * RP + g * GP + b * BP)) > value then
          ImgDest.Canvas.Pixels[X, Y] := clWhite else
           ImgDest.Canvas.Pixels[X, Y] := clBlack;
      end;
  end;
end;

بالتوفيق.

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