Şimdi Ara

c# image processing

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
12
Cevap
0
Favori
1.176
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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.







  • 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?




  • 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
  • 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;




  • 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
  • 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;
    }




  • ç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 >
  • quote:

    Orijinalden alıntı: mekka

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

    Ne hata alıyorsun?
  • 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 >
  • 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




  • 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.
  • stretch moda da getirdim ancak çizilen bişi göremiyorum :S
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.