2009-08-12 94 views
5

Tôi có một vài Hình ảnh JPG. Một số người trong số họ có thể có đường viền màu đen ở một hoặc nhiều bên và tôi muốn xóa chúng. Đường viền màu đen có thể không bao quanh hình ảnh thực tế - một số chỉ có thể có đường viền ở phía dưới (với hình ảnh thực tế ở trên cùng), trong khi một số có thể được làm trung tâm (có nghĩa là viền màu đen ở hai bên, nhưng không được kết nối). Tệ hơn nữa, hình ảnh được nén JPG, vì vậy chúng có thể không chính xác 0,0,0 màu đen nữa.Xóa đường viền màu đen xung quanh một hình ảnh

Trong chương trình sơn, tôi sẽ "đơn giản" sử dụng công cụ Magic Wand với dung sai thấp, nhưng tôi cần thực hiện trong C# trên ASP.net và tôi không biết cách tốt nhất để làm điều này Là.

Tôi có nên "quét" từng dòng và sau đó mỗi cột (hai lồng nhau cho các vòng lặp) để tìm các vùng màu đen? Âm thanh hơi ngu ngốc để làm, hiệu suất và CPU-Load-khôn ngoan. Hay GDI + có một số công cụ Magic Wand đã được xây dựng chưa?

Hình ảnh không lớn (tối đa 474x474 pixel) và được lưu trong bộ nhớ cache sau đó, nhưng tôi cần phải giữ cho máy chủ tải thấp nhất có thể.

Bất kỳ gợi ý nào về cách làm việc ít ngu ngốc nhất?

Trả lời

4

Nó có vẻ như cho mỗi cạnh bạn có thể làm một cái gì đó như thế này:

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

Cách tiếp cận đó có vẻ hơi brute-force (hai cho-vòng), nhưng nó là đáng ngạc nhiên nhanh (dưới 1 mili giây cho mỗi bức tranh). Cảm ơn ý tưởng với giá trị Màu trung bình. –

+1

Sự thật đáng buồn với xử lý hình ảnh là, ít nhất ở mức thấp hơn, bạn phải lặp qua tất cả các pixel quan tâm. Ngoài ra, hãy cẩn thận với phương pháp này nếu người dùng có thể tải lên hầu hết các hình ảnh đen. Có thể đặt giới hạn trên cho kích thước đường viền cho phép. – Eric

Các vấn đề liên quan