2009-08-12 16 views
5

Birkaç JPG resmi var. Bunlardan bazıları bir veya daha fazla kenarda siyah bir kenarlığa sahip olabilir ve bunları kaldırmak istiyorum. Siyah kenarlık gerçek görüntünün etrafından dolanmayabilir - bazıları sadece alt kısımda (en üstteki gerçek görüntü ile), bazıları ise ortalanmış olabilir (yani iki kenarda siyah kenarlık anlamına gelir, ancak bağlı değildir). Daha da kötüsü, görüntüler JPG Sıkıştırılmış, bu yüzden artık tam olarak 0,0,0 siyah olmayabilirler.Bir resmin çevresindeki siyah kenarlığı kaldırma

Bir Paint Programında, Magic Wand aracını düşük bir toleransla "basitçe" kullanırdım, ancak ASP.net'de C# içinde yapmam gerekiyor ve bunu yapmanın en iyi yolunun ne olduğunu bilmiyorum olduğunu.

Siyah çizgileri bulmak için her satırı ve sonra her bir sütunu (iki iç içe geçmiş döngü) "tara" mı yapmalıyım? Performans, CPU ve Load-wise için biraz aptalca geliyor. Ya da GDI + 'nın bazı sihirli değnek aracı yapımı var mı?

Resimler bu büyük (474x474 piksel maksimum) değil ve daha sonra önbelleğe alınmış, ancak sunucu yükünü olabildiğince düşük tutmalıyım.

Bunu yapmanın en aptalca yolu ne olabilir?

cevap

4

Size böyle bir şey yapabileceğini, her kenar için gibi görünüyor:

for each edge: 
    for (i = 0; ; i++) { 
     compute average pixel value along edge row/column + i 
     if (average value > threshold) 
       break; 
    } 
    crop image 
+0

Bu yaklaşım biraz kaba kuvvet (iki-döngüler) görünüyor, ama (şaşırtıcı derecede hızlıdır resim başına 1 milisaniyeden az). Ortalama Renk değeriyle ilgili fikir için teşekkür ederiz. –

+1

Görüntü işleme ile ilgili üzücü gerçek, en azından daha düşük bir seviyede, ilgili tüm piksellerin üzerinde yinelemek zorunda. Ayrıca, kullanıcılar çoğunlukla siyah görüntü yükleyebiliyorsa, bu yönteme biraz dikkat edin. Belki de izin verilen kenarlık boyutunda bir üst sınır belirler. – Eric

İlgili konular