PDA

View Full Version : آموزش: تبدیل تصویر خاکستری به رنگی



MoM.Mortazavi
پنج شنبه 04 آذر 1389, 01:02 صبح
سلام.به همگی خسته نباشید میگم.
میخوام با سی شارپ یه برنامه بنویسم که یه عکس "خاکستری" رو از Picturebox بگیره و با زدن Button به عکس "رنگی" تبدیل بشه و تو Picturebox دیگه نشون بده.ممنون میشم کمکم کنید.مرسی

codelover
پنج شنبه 04 آذر 1389, 09:33 صبح
سلام دوست عزیز
اگر منظورتون تبدیل به عکس اول رنگی هست که شامل سه رنگ اصلی بشه باید بگم تا حالا همچین برنامه ای ساخته نشده چون اطلاعات رنگ تو عکس های خاکستری از بین رفته و کامپیوتر هم خودش نمیتونه تشخیص بده که مثلا آسمون رو آبی کنه
ولی اگر منظورتون مثلا تبدیل یه عکس خاکستری به سیاه قرمز(عکسی که فقط از رنگهای سیاه و قرمز) هست باید بگم که مشکلی وجود نداره و اینم کدش میشه :



private void button1_Click(object sender, EventArgs e)
{
Bitmap bitmap = new Bitmap(@"D:\1.gif");
Bitmap target = new Bitmap(bitmap.Width, bitmap.Height);

for (int i = 1; i < bitmap.Size.Height; i++) {

for (int j = 1; j < bitmap.Size.Width; j++) {

int mid = (bitmap.GetPixel(j, i).R + bitmap.GetPixel(j, i).G + bitmap.GetPixel(j, i).B)/3;
target.SetPixel(j,i,Color.FromArgb(mid,0,0));

}

}

pictureBox1.Image = target;
}

dr_jacky_2005
پنج شنبه 04 آذر 1389, 09:43 صبح
سلام دوست عزیز
اگر منظورتون تبدیل به عکس اول رنگی هست که شامل سه رنگ اصلی بشه باید بگم تا حالا همچین برنامه ای ساخته نشده چون اطلاعات رنگ تو عکس های خاکستری از بین رفته و کامپیوتر هم خودش نمیتونه تشخیص بده که مثلا آسمون رو آبی کنه
ولی اگر منظورتون مثلا تبدیل یه عکس خاکستری به سیاه قرمز(عکسی که فقط از رنگهای سیاه و قرمز) هست باید بگم که مشکلی وجود نداره و اینم کدش میشه :



private void button1_Click(object sender, EventArgs e)
{
Bitmap bitmap = new Bitmap(@"D:\1.gif");
Bitmap target = new Bitmap(bitmap.Width, bitmap.Height);

for (int i = 1; i < bitmap.Size.Height; i++) {

for (int j = 1; j < bitmap.Size.Width; j++) {

int mid = (bitmap.GetPixel(j, i).R + bitmap.GetPixel(j, i).G + bitmap.GetPixel(j, i).B)/3;
target.SetPixel(j,i,Color.FromArgb(mid,0,0));

}

}

pictureBox1.Image = target;
}


نه دوست عزیز
همچین نرم افزاری ساخته شده.
البته تقریبا هوشمنده
اسمش»
Blackmagic (http://www.blackmagic-color.com/)

codelover
پنج شنبه 04 آذر 1389, 09:50 صبح
دوست عزیز این برنامه که خودش نمیتونه مثلا یه درخت رو تشخیص بده پس کاربر باید بهش بگه که این درخت هستش و رنگش سبزه اونوقت اونم رنگش رو سبز میکنه

MoM.Mortazavi
جمعه 05 آذر 1389, 10:18 صبح
جریان از این قراره -->ما عکس رو در Picturebox وارد می کنیم.3 نمودار هم برای رنگهای آبی , قرمز,سبز داریم که بوسیله حرکت جهت نما حرکت میکنند و یه مقدار اولیه رو نشان میدن.یعنی پیکسل رنگی رو دستی وارد می کنیم. این تصویر که مشاهده می کنید :
http://up.iranblog.com/Files0/e8635cbc9a154963b165.jpg
3 مقدار اولیه این 3 تا نمودار میشه اولین پیکسل تصویر رنگی ما یعنی(85,190,76 )و به ترتیب بقیه پیکسل ها خونده میشه و با زدن دکمه Button میخوام عکس رنگی رو نشون بده.
این تصویر هم اینطوری ایجاد شده :


Bitmap pic = new Bitmap(pictureBox1.Width, pictureBox1.Height);
offset += 2;
for (int i = 0; i < pictureBox1.Width; i++)
for (int j = 0; j < pictureBox1.Height; j++)
{
pic.SetPixel(i, j, Color.Black);
}
for (int x = 0; x < 255; x++)
{
int y = 255 - ((int)(255 * Math.Abs(Math.Sin((x + offset) * (Math.PI / 180)))));
pic.SetPixel((int)x, (int)y, Color.Red);
}
pictureBox1.Image = pic;

ازتون خواهش می کنم که کمکم کنید.

dr_jacky_2005
جمعه 05 آذر 1389, 18:32 عصر
دوست عزیز این برنامه که خودش نمیتونه مثلا یه درخت رو تشخیص بده پس کاربر باید بهش بگه که این درخت هستش و رنگش سبزه اونوقت اونم رنگش رو سبز میکنه
منم که گفتم تقریبا هوشمنده :بامزه:

dr_jacky_2005
جمعه 05 آذر 1389, 18:36 عصر
http://www.codeproject.com/KB/graphics/GrayscalToColor.aspx