Biorąc pod uwagę obraz, który zawiera pewną rzeczywistą zawartość i zwykle niechcianą biel lub czerń lub przezroczystość wokół niego, chciałbym przyciąć lub przyciąć zewnętrzne części za pomocą ImageMagick.
Poniższy obraz został narysowany cyfrowo na komputerze (w kodzie HTML <canvas>
):
Próbowałem następującego polecenia ImageMagick:
$ convert canvas.png -trim +repage canvas_trimmed.png
I działało idealnie:
Właśnie tego chcę. Ale teraz chcę, aby działało to również ze skanowanymi dokumentami, które nie są tak „doskonałe” jak obrazy generowane komputerowo, tj. Mają więcej odcieni „białego” i „czarnego” oraz brak przejrzystości, która byłaby łatwiejsza do wykrycia. Czasami mają nawet czarne paski wokół białego tła papieru, ponieważ obszar skanera jest większy niż papier:
W przypadku tego obrazu wypróbowałem następujące polecenia w podanej kolejności, każda próbowała być bardziej agresywna, ale żadna nie przyniosła żadnych rezultatów - nie widać żadnej różnicy między obrazem oryginalnym a obrazem „przyciętym”, tj. Przycinanie lub kadrowanie w ogóle nie działa:
$ convert scan.jpg -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 10% -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -bordercolor white -border 1x1 -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -bordercolor black -border 1x1 -trim +repage scan_trimmed.jpg
Co ja tu robię źle? W jaki sposób można zmodyfikować polecenie ImageMagick, które niezawodnie przycina obrazy generowane komputerowo, tak samo jak niezawodnie przycina zeskanowane dokumenty o powyższym stylu?
Odpowiedzi:
Możesz użyć opcji -shave i po prostu ogolić krawędzie, a następnie użyć logiki, której używasz później, aby odpowiednio przetworzyć.
Przykładowa logika
Przed
Po
Dalsze zasoby
źródło
-shave
opcja działa dobrze, przynajmniej tak się wydaje. Nie znałem tej opcji (jakoś zawsze ją przeoczyłem) i jest to bardzo pomocne dla krawędzi. Używając czegoś podobnego-shave 90x90
do przykładowego obrazu, wszystkie krawędzie zniknęły. Ale krawędzie nigdy nie były jedynym problemem. Nawet po całkowitym ich usunięciu, a nawet przy łagodnych ustawieniach, takich jak-fuzz 80%
górna biała część jest usuwana tylko, jeśli w ogóle. Wygląda na to, że w białych obszarach generowanych przez skaner występuje „brud”, który uniemożliwia-trim
działanie. Być może jednak nie ma lepszego rozwiązania.Usuń drobiny brudu lub szumy z obrazów za pomocą ImageMagick
Poniżej znajduje się to, czego użyłem, aby pozbyć się drobinek brudu w pliku obrazu z obrazu w twoim pytaniu, ale poszedłem dalej i użyłem golenia z
90x90
pierwszym, co, jak potwierdziłeś, pomogło rozwiązać problem z innego rozwiązania, które zapewniłem przyznana nagroda.Przykładowa logika
Przed
Po
Dalsze zasoby
źródło
-trim
) powoduje wyczyszczenie i przycięcie obrazu zgodnie z potrzebami. Wielkie dzięki!To, co ostatecznie zapewniło doskonałe wyniki, przynajmniej dla mojego konkretnego przykładu pokazanego w pierwotnym pytaniu (
scan.jpg
), to następujące dwuetapowe rozwiązanie:To rozwiązanie składa się z trzech części:
-shave
Operator zaproponował w tej odpowiedziźródło