Merhabalar ,
arkadaşlar yeri burasımıdır bilemedim ama, bir konuda desteğe ihtiyacım var,
bir resim içinde sarıya boyanmış renkler var (daha doğrusu bu resim iki resmin analizi yapılıp farkları bulunmuş ve farkların sarıya boyandığı bir resim) , bu resimdeki sarı renkleri canvas ile kutucuk içine almak istiyorum, ama bir türlü işin içinden çıkamadım,
konu hakkında yardımcı olabilecek bir arkadaş var mı acaba,
En basit yöntem ile sarı rengin değerini tespit etin (RBG olarak bir değeri olacaktır) daha sonra Canvası Pixel Pixel tarayıp Sol üst köşeyi tespit edersiniz. Bir de en alttaki sağ alt köşeyi tespit edip, arada kalan alanı zaten otomatik olarak tespit etmiş olursunuz. Canvas'ın pixel pozisyonundaki renk değerini de TBitmap.Canvas.Pixels[x, y] şeklinde kullanabilirsiniz.
(30-05-2018, Saat: 09:11)Kuri_YJ Adlı Kullanıcıdan Alıntı: Selamlar,
En basit yöntem ile sarı rengin değerini tespit etin (RBG olarak bir değeri olacaktır) daha sonra Canvası Pixel Pixel tarayıp Sol üst köşeyi tespit edersiniz. Bir de en alttaki sağ alt köşeyi tespit edip, arada kalan alanı zaten otomatik olarak tespit etmiş olursunuz. Canvas'ın pixel pozisyonundaki renk değerini de TBitmap.Canvas.Pixels[x, y] şeklinde kullanabilirsiniz.
Kolay Gelsin
Merhabalar,
image içindeki yer alan sarı alan sadece bir tek kutucuk şeklindeyse sorun yok onu buluyorum, ama birden fazla olduğunda hangi kısım başlangıç , hangi kısım bitiş bulamıyorum,
yani resim içinde birden fazla şekil olunca bulamıyorum,
ayrıca boyama işleminde sorun yok ben o sarı kısımları kırımızı kutuk içine alıp kullanıcıyı bilgilendirmek istiyorum.
(30-05-2018, Saat: 12:32)selocanbaba Adlı Kullanıcıdan Alıntı:
(30-05-2018, Saat: 09:11)Kuri_YJ Adlı Kullanıcıdan Alıntı: Selamlar,
En basit yöntem ile sarı rengin değerini tespit etin (RBG olarak bir değeri olacaktır) daha sonra Canvası Pixel Pixel tarayıp Sol üst köşeyi tespit edersiniz. Bir de en alttaki sağ alt köşeyi tespit edip, arada kalan alanı zaten otomatik olarak tespit etmiş olursunuz. Canvas'ın pixel pozisyonundaki renk değerini de TBitmap.Canvas.Pixels[x, y] şeklinde kullanabilirsiniz.
Kolay Gelsin
Merhabalar,
image içindeki yer alan sarı alan sadece bir tek kutucuk şeklindeyse sorun yok onu buluyorum, ama birden fazla olduğunda hangi kısım başlangıç , hangi kısım bitiş bulamıyorum,
yani resim içinde birden fazla şekil olunca bulamıyorum,
ayrıca boyama işleminde sorun yok ben o sarı kısımları kırımızı kutuk içine alıp kullanıcıyı bilgilendirmek istiyorum.
sarı alanı seçtikten sonra rengini özel bir renk yapıp sonra taramaya devam edip diğerlerinide değiştirebilirsiniz, en son yine de sarı olsun derseniz tarayıp özel verdiğiniz rengi sarı yapabilirsiniz. Çok anladığım bir konu değil aklıma gelen çözüm bu
Konu Poligon konusu. Yani 2 boyutlu uzayda poligonların tespitine yönelik bir konu. En basit yöntemini ben anlattım. Yani Sol Üst köşeden taramaya başlayıp, ilgili Pixel'in solunda sağında üstünde altında ve çapraz noktalarında aradığınız renk var mı diye bakacaksınız. Var ise demek ki bu nokta bir poligon parçasıdır deyip bir algoritma geliştirmeniz lazım. Ama kolay değil onu söyleyeyim.
Bunun dışında matematik modellemeleri var Poligon Tayini ve sınırlarını belirleyebilmek için. Bu nedenle bir matematikçiye danışmanızda fayda var. Onun ötesinde ben şöyle bir göz attığımda internete bu konu ile alakalı pek çok makale ve bilimsel yayın buldum ama biraz ağır gelir gibi.
İlerlemelerden haber verirseniz ve ben de bir şeyler bulursam haber veririm.
(02-06-2018, Saat: 12:55)Kuri_YJ Adlı Kullanıcıdan Alıntı: Selamlar,
Konu Poligon konusu. Yani 2 boyutlu uzayda poligonların tespitine yönelik bir konu. En basit yöntemini ben anlattım. Yani Sol Üst köşeden taramaya başlayıp, ilgili Pixel'in solunda sağında üstünde altında ve çapraz noktalarında aradığınız renk var mı diye bakacaksınız. Var ise demek ki bu nokta bir poligon parçasıdır deyip bir algoritma geliştirmeniz lazım. Ama kolay değil onu söyleyeyim.
Bunun dışında matematik modellemeleri var Poligon Tayini ve sınırlarını belirleyebilmek için. Bu nedenle bir matematikçiye danışmanızda fayda var. Onun ötesinde ben şöyle bir göz attığımda internete bu konu ile alakalı pek çok makale ve bilimsel yayın buldum ama biraz ağır gelir gibi.
İlerlemelerden haber verirseniz ve ben de bir şeyler bulursam haber veririm.
Kolay Gelsin
Merhabalar,
valla bir gelişme katedemedim ya acaba bunun için filtre veya kütüphane var mıdır acaba ?
Merhaba, aşağıdaki gibi basit bir kod yazdım, bende sonucu gayet kullanılabilir çıktı, bi deneyin isterseniz.
type
PRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = array[0..32765] of TRGBTriple;
var
DCDesk: HDC;
bmp: TBitmap;
p: array of PRGBTripleArray;
x,y:integer;
begin
bmp := TBitmap.Create; // bitmap olustur
bmp.Width := Image1.Width; // width ayarla
bmp.Height := Image1.Height; // height ayarla
bmp:=Image1.Picture.Bitmap; // resmi bitmap e yukle
setlength(p,Image1.Height); // p nin boyutunu ayarla (bitmap in satır sayısı kadar)
for x:=0 to Image1.Height-1 do // her satır pikselleri taramak icin donguye sok
begin // x dongu
p[x]:=bmp.ScanLine[x]; // ilgili satırı tarayıp p ye yukle
for y:=0 to bmp.Width do begin // bitmap uzunlugu kadar donguye sok
if (y<bmp.Width-2) Then Begin // sondaki 2 pikseli atıyorum sona tek çizgi atmasın diye
// onceki-sonraki piksel renklerini kontrol et
if (p[x][y].rgbtBlue<>p[x][y+1].rgbtBlue)
then begin
Image1.Canvas.Pixels[y,x]:=clred;
Image1.Canvas.Pixels[y-1,x]:=clred;
end;
// ustteki-alttaki piksel renklerini kontrol et
if (x>0) Then Begin
if (p[x-1][y].rgbtBlue<>p[x][y].rgbtBlue)
then begin
Image1.Canvas.Pixels[y,x-1]:=clred;
Image1.Canvas.Pixels[y,x-2]:=clred;
End;
End;
End;
end; // bitmap uzunlugu kadar donguye sok
end; // x dongu
i
öncesi
sonrası
Bu arada ben sadece mavi rengi kontrol ettirdim siz rgb değerinin tamamını kontrol edebilirsiniz.
birde forma bir bitmap koyup onun içindeki resmi alıp işledim sizde zaten o şekilde gelecektir resim, ona göre ayarlarsınız.
(12-06-2018, Saat: 13:17)esistem Adlı Kullanıcıdan Alıntı: Merhaba, aşağıdaki gibi basit bir kod yazdım, bende sonucu gayet kullanılabilir çıktı, bi deneyin isterseniz.
type
PRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = array[0..32765] of TRGBTriple;
var
DCDesk: HDC;
bmp: TBitmap;
p: array of PRGBTripleArray;
x,y:integer;
begin
bmp := TBitmap.Create; // bitmap olustur
bmp.Width := Image1.Width; // width ayarla
bmp.Height := Image1.Height; // height ayarla
bmp:=Image1.Picture.Bitmap; // resmi bitmap e yukle
setlength(p,Image1.Height); // p nin boyutunu ayarla (bitmap in satır sayısı kadar)
for x:=0 to Image1.Height-1 do // her satır pikselleri taramak icin donguye sok
begin // x dongu
p[x]:=bmp.ScanLine[x]; // ilgili satırı tarayıp p ye yukle
for y:=0 to bmp.Width do begin // bitmap uzunlugu kadar donguye sok
if (y<bmp.Width-2) Then Begin // sondaki 2 pikseli atıyorum sona tek çizgi atmasın diye
// onceki-sonraki piksel renklerini kontrol et
if (p[x][y].rgbtBlue<>p[x][y+1].rgbtBlue)
then begin
Image1.Canvas.Pixels[y,x]:=clred;
Image1.Canvas.Pixels[y-1,x]:=clred;
end;
// ustteki-alttaki piksel renklerini kontrol et
if (x>0) Then Begin
if (p[x-1][y].rgbtBlue<>p[x][y].rgbtBlue)
then begin
Image1.Canvas.Pixels[y,x-1]:=clred;
Image1.Canvas.Pixels[y,x-2]:=clred;
End;
End;
End;
end; // bitmap uzunlugu kadar donguye sok
end; // x dongu
i
öncesi
sonrası
Bu arada ben sadece mavi rengi kontrol ettirdim siz rgb değerinin tamamını kontrol edebilirsiniz.
birde forma bir bitmap koyup onun içindeki resmi alıp işledim sizde zaten o şekilde gelecektir resim, ona göre ayarlarsınız.
Aslında biraz daha detaylandırılsa çok güzel makale çıkar buradan
Makale değilde hocam, birkaç yıl önce çok çok uçuk bir projem vardı, ondan dolayı azda olsa öğrenmek zorunda kalmıştım şu görüntü işleme olaylarını, fakat kısmet olmadı yapmak. Olurda vakit bulup yaparsam proje olarak paylaşırım belki, gerçi projeyi kime anlattıysam küfürle karışık alay ettiler hep benle