PDA

View Full Version : حرفه ای: تعیین درصد رنگهای یک تصویر



hamedAdmin
سه شنبه 19 دی 1391, 10:01 صبح
سلام به همه.
یه عکس داریم با فرمت jpeg یا حالا انواع دیگه؛ میخام تمام رنگهایی که توش بکار رفته(البته فرض بر اینه که بیش از 50 تا رنگ نداره) مثلا اگه 30 تا رنگ داره بهمون بگه چه رنگهایی داره یعنی لسیت کنه کد رنگها رو و بگه که چند درصد کل تصویر رو این رنگ تشکیل میده!
مثلا تصویر 5 رنگ داره, برنامه اینو بده
قرمز 55 درصد
آبی 10 درصد
سفید 10 درصد
زرد 15 درصد
نارنجی 10 درصد

hamedAdmin
چهارشنبه 20 دی 1391, 06:54 صبح
یعنی واقعا کسی جوابشو نمیدونه؟:متعجب:

the king
چهارشنبه 20 دی 1391, 08:09 صبح
سلام به همه.
یه عکس داریم با فرمت jpeg یا حالا انواع دیگه؛ میخام تمام رنگهایی که توش بکار رفته(البته فرض بر اینه که بیش از 50 تا رنگ نداره) مثلا اگه 30 تا رنگ داره بهمون بگه چه رنگهایی داره یعنی لسیت کنه کد رنگها رو و بگه که چند درصد کل تصویر رو این رنگ تشکیل میده!
مثلا تصویر 5 رنگ داره, برنامه اینو بده
قرمز 55 درصد
آبی 10 درصد
سفید 10 درصد
زرد 15 درصد
نارنجی 10 درصد

روش کند اش اینطوری یه، تبدیل اش کنید به یک Bitmap که بشه پیکسل هاشو مجزا خوند، Image و Bitmap بدون مشکل به هم تبدیل می شوند :


Bitmap bmp = (Bitmap)Bitmap.FromFile(@"C:\Your Image.jpg");


یک محدوده قابل قبول هم برای اختلاف رنگ در نظر بگیرید، مخصوصا در مورد JPEG که فشرده سازی اش روی رنگ تاثیر داره، فرضا اگر تا 10 درصد
اختلاف رنگ وجود داشت هم قابل قبول باشه :


const int tolerance = 10;


رنگ دلخواه تون رو هم مشخص کنید :


Color color = Color.Red;




long count = 0;
for (int i = 0; i < bmp.Width; i++)
for (int j = 0; j < bmp.Height; j++)
if (ColorEquals(bmp.GetPixel(i, j), color))
count++;
float percent = 100f * count / (bmp.Width * bmp.Height);
MessageBox.Show(percent.ToString());




private bool ColorEquals(Color a, Color b)
{
float diff = (float)Math.Pow(Math.Pow((int)a.R - (int)b.R, 2)
+ Math.Pow((int)a.G - (int)b.G, 2)
+ Math.Pow((int)a.B - (int)b.B, 2), 0.3333);
return (diff <= (float)tolerance * 0.58f);
}

hamedAdmin
پنج شنبه 21 دی 1391, 07:57 صبح
ممنونم.
نکته اش همون تبدیل jpeg بود!
بازم منونم