حذف پس زمینه رنگی عکس در سی شارپ #C

فرض کنید تصویری Bitmap در C # بارگذاری کرده اید که دارای پس زمینه ای با رنگ قرمز داشته باشد . به این شکل که یک تصویر مربع ای شکل یا حتی مستطیل که سطحی از آن دارای رنگ های قرمز وجود دارد که کاملا متمایز با سایر رنگهای دیگر نقاط تصویر است .

هدف این است تصویر از رنگ قرمز پاکسازی شود . برای عکس های اسکن شده از یک برگه متنی که تمام حروف به رنگی مشکی است این روش خیلی می تواند موثر باشد . و به راحتی می توان نویز های رنگی را حذف نمود.

در اینجا نسخه ای با استفاده از LockBits وجود دارد.

فرض این است که اگر سیاه نباشد ، آن را به سفید تغییر دهید.

  1. این روش با استفاده از GetPixel و SetPixel خواهد بود
  2. با استفاده از اشاره گرها با داده های خام در حافظه کار می کند
  3.  هر پیکسل تکرار می شود
  4. رنگ را بررسی می کند و در صورت نیاز آن را به سفید تغییر می دهد
  5. تصویر را ذخیره می کند
پلتفرم بوی اجرا شدن خروجی صحیح قطعه کد زیر را تایید می کند

قطعه کدی که در زیر مشاهده می کنید توسط برنامه کامپایلر به جهت تست آزمایش شده و خروجی صحیح مدنظر را بدست آورد.

using (var bmp = new Bitmap(@"D:\Test.png"))
{
   var data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppPArgb);
   var white = Color.White.ToArgb();
   var black = Color.Black.ToArgb();

   try
   {
      var length = (int*)data.Scan0 + bmp.Height * bmp.Width;
      for (var p = (int*)data.Scan0; p < length; p++)
         if (*p != black) *p = white;
   }
   finally
   {
      // unlock the bitmap
      bmp.UnlockBits(data);
      bmp.Save(@"D:\Output.Bmp", ImageFormat.Bmp);
   }
}

 

آیا این نوشته برای شما مفید بود ؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *