PDA

View Full Version : سوال: مقایسه 2 تصویر



m.h.movahedi
دوشنبه 22 فروردین 1390, 14:33 عصر
سلام دوستان
من 2 تا تصویر دارم که در بعضی پیکسل ها با هم تفاوت دارند.
میخوام کدی بنویسم که پیکسل های متفاوت در یکی از تصاویر رو به رنگ خاصی در بیاره.
کسی میتونه کمک کنه؟

omn!a2
دوشنبه 22 فروردین 1390, 18:48 عصر
سلام

اینم کد:


private void button1_Click(object sender, EventArgs e)
{
int px, py;
Color _color1 , _color2;

for (px = 0; px < _Bitmap1.Width; px++)
{
for (py = 0; py < _Bitmap1.Height; py++)
{
_color1 = _Bitmap1.GetPixel(px, py); //مربوط به تصویر اولی
_color2 = _Bitmap2.GetPixel(px, py);//مربوط به تصویر دومی

if (_color1 != _color2)
_Bitmap2.SetPixel(px, py, Color.Blue);//رنگ کردن پیکسل با رنگ دلخواه
}
}

}

AlgorithmX
دوشنبه 22 فروردین 1390, 23:31 عصر
سلام

اینم کد:


private void button1_Click(object sender, EventArgs e)
{
int px, py;
Color _color1 , _color2;

for (px = 0; px < _Bitmap1.Width; px++)
{
for (py = 0; py < _Bitmap1.Height; py++)
{
_color1 = _Bitmap1.GetPixel(px, py); //مربوط به تصویر اولی
_color2 = _Bitmap2.GetPixel(px, py);//مربوط به تصویر دومی

if (_color1 != _color2)
_Bitmap2.SetPixel(px, py, Color.Blue);//رنگ کردن پیکسل با رنگ دلخواه
}
}

}


د.ست عزیز میشه بگین منظور از Bitmap1_ چیه؟ چون زیرش خط میکشه!

sarbaz_esf
دوشنبه 22 فروردین 1390, 23:59 عصر
همان عکس میشه

omn!a2
سه شنبه 23 فروردین 1390, 00:02 صبح
سلام

Bitmap1_ از نوع کلاس Bitmap می باشد که در ابتدا باید تعریفش کنید

Bitmap _Bitmap1, _Bitmap2;

سپس در قسمت Form Load نمونه سازی بکنید

_Bitmap1 = new Bitmap(pictureBox1.Width, pictureBox1.Height);
_Bitmap2 = new Bitmap(pictureBox2.Width, pictureBox2.Height);


پیکچر باکسها هم در این قسمت باید با این بیت مپها برابر بکنید

AlgorithmX
سه شنبه 23 فروردین 1390, 15:00 عصر
خوب من این کار رو همونطور گه فرمودین کردم و دوتا عکس با چند تفاوت داخل پیکچرباکس ها گزاشتم اما پیکسل های متفاوت رو آبی رنگ نکرد

m.h.movahedi
سه شنبه 23 فروردین 1390, 17:27 عصر
ممنون دوست عزیز ولی من این کد زیر رو نوشتم



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace EQ_im
{
public partial class Form1 : Form
{
Bitmap Bitmap1, Bitmap2;
public Form1()
{
InitializeComponent();

}
private void Form1_Load(object sender, EventArgs e)
{
Bitmap1 = new Bitmap(picture1.Width, picture1.Height);
Bitmap2 = new Bitmap(picture2.Width, picture2.Height);
}
private void button1_Click(object sender, EventArgs e)
{
try
{
int px, py;
Color color1, color2;
for (px = 1; px < Bitmap1.Width; px++)
{
for (py = 1; py < Bitmap1.Height; py++)
{
color1 = Bitmap1.GetPixel(px, py);
color2 = Bitmap2.GetPixel(px, py);
if (color1 != color2)
{
Bitmap2.SetPixel(px, py, Color.Red);
}
}
}
MessageBox.Show("عملیات با موفقیت انجام شد");
}
catch(Exception)
{
MessageBox.Show("خطا");
}
}
}

}


و پیام انجام رو میده ولی تغییری ایجاد نمی کنه .من کاملا" گیج شدم :گیج:

omn!a2
چهارشنبه 24 فروردین 1390, 02:39 صبح
سلام
ببخشید متوجه منظورتون نشده بودم!
برای این کار باید کدهای داخل Form Load رو به این شکل تغییر دهید:


_Bitmap1 = new Bitmap(@"Pic_1.bmp");//نشانی فایل اول

pictureBox1.Image = _Bitmap1;

_Bitmap2 = new Bitmap(@"Pic_2.bmp");//نشانی فایل دوم

pictureBox2.Image = _Bitmap2;

موفق باشید...

AlgorithmX
چهارشنبه 24 فروردین 1390, 12:17 عصر
می دونید مشکل این برنامه چیه ؟؟ مشکلش اینه که اگر سایز (طول و عرض) دو عکس باهم برابر نباشند اخطار میده!

مشیه این مشکل رو حل کرد که عکس با هر سایزی وارد کار مقایسه بشه؟

omn!a2
چهارشنبه 24 فروردین 1390, 23:18 عصر
بله عکس دومی اگر کوچیکتر باشه اخطار میده
برای رفع این مشکل باید این کد رو در ابتدای حلقه py اضافه کنید


if (px > _Bitmap2.Width - 1 || py > _Bitmap2.Height - 1)
break;