Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
11
Cevap
1199
Tıklama
0
Öne Çıkarma
c# image processing
M
11 yıl
Yüzbaşı
Konu Sahibi

arkadşalar iyi akşamlar....c# ta bir proje yapıoyurm..kameradan alınan İki resimi birbirinden çıkarıp yeni halinin yazdıracam.Ancak bir sorun ile karşılaştım.Projenin çoğunu bitirdim sadece farkı alma işleminde sorun var.Bu işlemi yaparken

kısaca anlatacak olursam

 
Bitmap bmp = new Bitmap(pictureBox4.Image);
Color r,r1,r2;
Bitmap img1 = new Bitmap(@"E:\proj\img1.bmp");
Bitmap img2 = new Bitmap(@"E:\proj\img2.bmp");

if (img1.Width == img2.Width && img1.Height == img2.Height)
{
for (int i = 0; i < img1.Width; i++)
{
for (int j = 0; j < img2.Height; j++)
{

r = img1.GetPixel(i, j);
r1 = img2.GetPixel(i, j);
}


}


burda yaptıgım iş 1. ve 2. resmin piksellerini alıp birbirinden çıkaracam.ancak daha önce c#kullanmadığım için yapamadım.bana Color array ine ait iki elemanın farkını alan kod lazım sizden ricam yardımcı olurmusunuz.zaten son olarak ta bmp.setPixel ile de farknı yazdıracam.
Not : Color arrayinin sanırım [A,R,G,B,] şeklinde 4 elemanı var.



W
11 yıl
Binbaşı

quote:

Orijinalden alıntı: mekka

arkadşalar iyi akşamlar....c# ta bir proje yapıoyurm..kameradan alınan İki resimi birbirinden çıkarıp yeni halinin yazdıracam.Ancak bir sorun ile karşılaştım.Projenin çoğunu bitirdim sadece farkı alma işleminde sorun var.Bu işlemi yaparken

kısaca anlatacak olursam

 
Bitmap bmp = new Bitmap(pictureBox4.Image);
Color r,r1,r2;
Bitmap img1 = new Bitmap(@"E:\proj\img1.bmp");
Bitmap img2 = new Bitmap(@"E:\proj\img2.bmp");

if (img1.Width == img2.Width && img1.Height == img2.Height)
{
for (int i = 0; i < img1.Width; i++)
{
for (int j = 0; j < img2.Height; j++)
{

r = img1.GetPixel(i, j);
r1 = img2.GetPixel(i, j);
}


}


burda yaptıgım iş 1. ve 2. resmin piksellerini alıp birbirinden çıkaracam.ancak daha önce c#kullanmadığım için yapamadım.bana Color array ine ait iki elemanın farkını alan kod lazım sizden ricam yardımcı olurmusunuz.zaten son olarak ta bmp.setPixel ile de farknı yazdıracam.
Not : Color arrayinin sanırım [A,R,G,B,] şeklinde 4 elemanı var.

Farktan kastın direk RGB değerlerini ayrı ayrı birnininden çıkarmaksa;
Color farkAl(Color c1, Color c2) 
{
//c1 - c2
Color fark = new Color();
byte yeniR = 0, yeniG = 0, yeniB = 0;
//R
if (c1.R > c2.R)
{
yeniR = (byte)(c1.R - c2.R);
}
if (c1.G > c2.G)
{
yeniG = (byte)(c1.G - c2.G);
}
if (c1.B > c2.B)
{
yeniB = (byte)(c1.B - c2.B);
}
fark = Color.FromArgb(yeniR, yeniG, yeniB);
return fark;
}

Yalnız dikkat etmen gereken bir nokta var,
c1'in rgbsindeb herhangi biri c2'ninkilerden ufaksa ne yapacaksın? Çıkarma işlemi yapılmayacak mı? Veya çıkartma işlemi dediğinin gerçek hayattaki boyamada vs. karşılığı ne?



M
11 yıl
Yüzbaşı
Konu Sahibi

yardımınız için teşekkürler birazdan deniyeecğim metodu...şöyle asıl yapmak istediğim iki resim arasındaki farkı bulmak


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @welrocken
W
11 yıl
Binbaşı

quote:

Orijinalden alıntı: mekka

yardımınız için teşekkürler birazdan deniyeecğim metodu...şöyle asıl yapmak istediğim iki resim arasındaki farkı bulmak

Bitmap farkAl(Bitmap b1, Bitmap b2) 
{
int width = b1.Width, height = b1.Height;//UFAK OLAN BOYUTU ALIYORUZ
if (b1.Width > b2.Width)
width = b2.Width;
if (b1.Height > b2.Height)
height = b2.Height;
Bitmap bmp = new Bitmap(width, height);//UFAK OLAN BOYUTLARLA YENİ RESMİ OLUŞTURUYORUZ
Color c1, c2, cN;

for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
c1 = b1.GetPixel(i, j);
c2 = b2.GetPixel(i, j);
cN = farkAl(c1, c2);
bmp.SetPixel(i, j, cN);
}
}
}

Color farkAl(Color c1, Color c2)
{
//c1 - c2
Color fark = new Color();
byte yeniR = 0, yeniG = 0, yeniB = 0;
//R
if (c1.R > c2.R)
{
yeniR = (byte)(c1.R - c2.R);
}
if (c1.G > c2.G)
{
yeniG = (byte)(c1.G - c2.G);
}
if (c1.B > c2.B)
{
yeniB = (byte)(c1.B - c2.B);
}
fark = Color.FromArgb(yeniR, yeniG, yeniB);
return fark;
}

Boyutları eşit olmasada çıkartma yapar.
Aynı isimde iki fonksiyon var ( farkAl ), parametreye renk girersen renk farklarını alırsın, bitmap girersen bitmaplerin farklarını alırsın.
Kullanımı;
Bitmap img1 = new Bitmap(@"E:\proj\img1.bmp");  
Bitmap img2 = new Bitmap(@"E:\proj\img2.bmp");
Bitmap newBitmap = farkAl(img1, img2);
pictureBox1.Image = newBitmap;



M
11 yıl
Yüzbaşı
Konu Sahibi

hocam bu bitmap metodu bişi döndürmesi gerek sanırım çalıştıramadım ...return ü eksik ama daha önce deiğim gibi C#ı pek bilmeidğim için beceremedim


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @welrocken
W
11 yıl
Binbaşı

Aynen pardon unutmuşum, bu arada test ettim de çok güzel resimler oluşuyor kullanım alanını bilmiyorum hala ama :)
 
Bitmap farkAl(Bitmap b1, Bitmap b2)
{
int width = b1.Width, height = b1.Height;//UFAK OLAN BOYUTU ALIYORUZ
if (b1.Width > b2.Width)
width = b2.Width;
if (b1.Height > b2.Height)
height = b2.Height;
Bitmap bmp = new Bitmap(width, height);//UFAK OLAN BOYUTLARLA YENİ RESMİ OLUŞTURUYORUZ
Color c1, c2, cN;

for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
c1 = b1.GetPixel(i, j);
c2 = b2.GetPixel(i, j);
cN = farkAl(c1, c2);
bmp.SetPixel(i, j, cN);
}
}
return bmp;
}

Color farkAl(Color c1, Color c2)
{
//c1 - c2
Color fark = new Color();
byte yeniR = 0, yeniG = 0, yeniB = 0;
//R
if (c1.R > c2.R)
{
yeniR = (byte)(c1.R - c2.R);
}
if (c1.G > c2.G)
{
yeniG = (byte)(c1.G - c2.G);
}
if (c1.B > c2.B)
{
yeniB = (byte)(c1.B - c2.B);
}
fark = Color.FromArgb(yeniR, yeniG, yeniB);
return fark;
}



M
11 yıl
Yüzbaşı
Konu Sahibi

çok ilginç ama ben çalıştıramadım hala :D





< Bu mesaj bu kişi tarafından değiştirildi mekka -- 23 Ekim 2014; 22:04:14 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @welrocken
W
11 yıl
Binbaşı

quote:

Orijinalden alıntı: mekka

çok ilginç ama ben çalıştıramadım hala :D

Ne hata alıyorsun?


Bu mesaja 1 cevap geldi.
M
11 yıl
Yüzbaşı
Konu Sahibi

resmi 4. pictureboxa çizdiremiyorum

  
Bitmap img1 = new Bitmap(@"E:\proj\img1.bmp");
Bitmap img2 = new Bitmap(@"E:\proj\img2.bmp");
Bitmap newBitmap = farkAl(img1, img2);
pictureBox4.Image =newBitmap;





< Bu mesaj bu kişi tarafından değiştirildi mekka -- 23 Ekim 2014; 22:08:12 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @welrocken
W
11 yıl
Binbaşı

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 ColorFark
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

Bitmap farkAl(Bitmap b1, Bitmap b2)
{
int width = b1.Width, height = b1.Height;//UFAK OLAN BOYUTU ALIYORUZ
if (b1.Width > b2.Width)
width = b2.Width;
if (b1.Height > b2.Height)
height = b2.Height;
Bitmap bmp = new Bitmap(width, height);//UFAK OLAN BOYUTLARLA YENİ RESMİ OLUŞTURUYORUZ
Color c1, c2, cN;

for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
c1 = b1.GetPixel(i, j);
c2 = b2.GetPixel(i, j);
cN = farkAl(c1, c2);
bmp.SetPixel(i, j, cN);
}
}
return bmp;
}

Color farkAl(Color c1, Color c2)
{
//c1 - c2
Color fark = new Color();
byte yeniR = 0, yeniG = 0, yeniB = 0;
//R
if (c1.R > c2.R)
{
yeniR = (byte)(c1.R - c2.R);
}
if (c1.G > c2.G)
{
yeniG = (byte)(c1.G - c2.G);
}
if (c1.B > c2.B)
{
yeniB = (byte)(c1.B - c2.B);
}
fark = Color.FromArgb(yeniR, yeniG, yeniB);
return fark;
}

private void Form1_Load(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string fileName1 = openFileDialog1.FileName;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string fileName2 = openFileDialog1.FileName;
Bitmap newBitmap = farkAl((Bitmap)Bitmap.FromFile(fileName1), (Bitmap)Bitmap.FromFile(fileName2));
pictureBox1.Image = newBitmap;
}
}
}

}
}


Al sana tam çalışan kod.
Form1'e bir tane PictureBox, bir tane de OpenFileDialog ekle.
Kodu Form1'in kod dosyasıyla değiştir (Form1.cs)
Daha sonra projenin adıyla koddaki ColorFark'ı değiştir (namespace'den sonra)

Çalışması lazım



W
11 yıl
Binbaşı

quote:

Orijinalden alıntı: mekka

resmi 4. pictureboxa çizdiremiyorum

  
Bitmap img1 = new Bitmap(@"E:\proj\img1.bmp");
Bitmap img2 = new Bitmap(@"E:\proj\img2.bmp");
Bitmap newBitmap = farkAl(img1, img2);
pictureBox4.Image =newBitmap;


Kodunda bir hata yok, hata alıyor musun? Yoksa çizilen birşey mi göremiyorsun? Stretch moda getirirsen pictureBox'ını resmi tam haliyle görebilirsin.



M
11 yıl
Yüzbaşı
Konu Sahibi

stretch moda da getirdim ancak çizilen bişi göremiyorum :S




Bu mesajda bahsedilenler: @welrocken
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.