2009-08-12 37 views
5

Tengo algunas imágenes JPG. Algunos de ellos pueden tienen un borde negro en uno o más lados, y me gustaría eliminarlos. El borde negro puede no ir alrededor de la imagen real, algunos pueden tener solo el borde en la parte inferior (con la imagen real en la parte superior), mientras que otros pueden estar centrados (lo que significa bordes negros en dos lados, pero no conectados). Peor aún, las imágenes están comprimidas en JPG, por lo que es posible que ya no sean exactamente 0,0,0 negras.Extracción del borde negro alrededor de una imagen

En un programa de pintura, usaría "simplemente" la herramienta Magic Wand con una tolerancia baja, pero tengo que hacerlo en C# en ASP.net, y no sé cuál es la mejor manera de hacerlo. es.

¿Debo "escanear" cada línea y luego cada columna (dos bucles foráneos anidados) para encontrar áreas negras? Suena un poco estúpido de hacer, el rendimiento y la CPU-carga-sabio. ¿O ya tiene GDI + alguna herramienta de varita mágica?

Las imágenes no son tan grandes (máximo de 474x474 píxeles) y se guardan en la memoria caché, pero necesito mantener la carga del servidor lo más baja posible.

¿Alguna pista de cuál sería la forma menos estúpida de hacerlo?

Respuesta

4

Parece que para cada borde se podría hacer algo como esto:

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

Ese enfoque parece una fuerza bruta bits (dos por bucles), pero es sorprendentemente rápido (menos de 1 milisegundo por foto) Gracias por la idea con el valor de Color promedio. –

+1

La triste verdad con el procesamiento de imágenes es que, al menos en un nivel inferior, debe iterar sobre todos los píxeles de interés. Además, tenga un poco cuidado con este método si los usuarios pueden cargar imágenes en su mayoría en negro. Tal vez establezca un límite superior en el tamaño de borde permitido. – Eric

Cuestiones relacionadas