Arama butonu
Bu konudaki kullanıcılar: 1 misafir
11
Cevap
1201
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.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



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.