Średni kolor obrazu
Naukowcy byli w stanie określić średni kolor wszechświata, ale w ilu bajtach możemy znaleźć średni kolor na obrazie?
Twoje zadanie
Twój wkład będzie pojedynczym obrazem, który będziesz musiał znaleźć średnią kolorów na obrazie i wyprowadzić szesnastkowy ciąg kolorów ( #??????
). Obraz może mieć dowolny z następujących formatów
- JPEG / JFIF
- JPEG 2000
- SPRZECZKA
- GIF
- BMP
- PNG
- PNM
- PPM
Dane wejściowe można również traktować jako adres URL / URI obrazu.
Wbudowane funkcje, które obliczają średnie lub próbkują obraz jednocześnie, takie jak ImageMeasurements
są niedozwolone.
Przykłady
Wyniki będą się nieco różnić w zależności od sposobu obliczania średniej i używanych modeli kolorów. Dodałem wartości RGB i LCH (HSV) dla poniższych obrazów.
wyjście: #53715F
RGB, może być również #3B7D3D
LCH (HSV)
wyjście: #8B7D41
RGB, #96753C
LCH (HSV)
code-golf
image-processing
Downgoat
źródło
źródło
95.6...
zaokrąglono do95
określonego wyniku.Odpowiedzi:
Pyth -
2322191816 bajtówTransponuje, aby uzyskać wszystkie kanały, a następnie sumuje, dzieli i szesnastkuje każdy. Kończy się przez połączenie i przygotowanie a
#
.Pobiera nazwę pliku obrazu (dowolnego typu) ze standardowego wejścia i wyjścia na standardowe wyjście. BARDZO WOLNY .
Przykładowy przebieg
źródło
PIL
biblioteki do obsługi obrazów. Poszukaj tutaj dokładnego źródła.Bash, 46 bajtów
ImageMagick skaluje obraz do jednego piksela, który zawiera średnią kolorów na obrazie, a następnie wyświetla go jako tekst.
źródło
MATLAB - 68 bajtów
Obraz jest odczytywany w
imread
połączeniu z,uigetfile
aby otworzyć GUI, aby wybrać obraz, który chcesz załadować. Założeniem tego kodu jest to, że wszystkie obrazy są RGB, i aby obliczyć średni kolor, sumujemy dla każdego kanału indywidualnie, a następnie dzielimy przez tyle elementów, ile jest w jednym kanale, czyli całkowitą liczbę pikseli na obrazie RGB ( ) podzieloną przez 3. Ponieważ średnia może ewentualnie generować wartości zmiennoprzecinkowe, konieczne jest wywołanie do zaokrąglenia liczby w dół w kierunku zera . w połączeniu z szesnastkowym łańcuchem formatującym ( * .numel
(I)
fix
sprintf
%x
) służy do wydrukowania każdej wartości całkowitej jako wartości średniej w ekwiwalencie szesnastkowym. Jest jednak po02
to, aby dopilnować, aby dodatkowe 0 było wstawiane w lewo, jeśli średnia wartość dla dowolnego kanału będzie mniejsza niż 16Przykładowe przebiegi
Zaletą
imread
jest to, że możesz czytać obrazy bezpośrednio z adresów URL. Jako powtarzalny przykład załóżmy, że pobrałeś obrazy na swój komputer i uruchomiłeś powyższy kod ... ale dla celów demonstracyjnych przeczytam obrazy bezpośrednio z Code Golf:Pierwszy obraz
Drugi obraz
* Uwaga: To był wspólny wysiłek użytkowników StackOverflow na czacie MATLAB i Octave .
źródło
CJam, 27 bajtów
To odczytało obraz PPM ze STDIN.
CJam nie ma wbudowanego przetwarzania obrazu, więc ten kod oczekuje Portable PixMap ASCII (magiczna liczba P3) z pełną 24-bitową paletą (maksymalna wartość 255) i bez komentarzy.
Testowe uruchomienie
Jak to działa
źródło
HTML5 + JavaScript (ES6), 335 bajtów
To nie wygra, ale i tak dobrze się bawiłem.
Wykorzystuje HTML5 Canvas API . Dane wejściowe to adres URL obrazu z obsługą CORS .
Próbny
Ponieważ jest to ES6, obecnie działa tylko w Firefox i Edge.
źródło
new Image
zImage()
?TypeError: Constructor Image requires 'new'
W='width'
iH='height'
używaći[H]
lubi[W]
Python [3] + SciPy,
144133121Ładuje dane w pikselach, sumy dla każdego kanału, dzieli przez rozmiar *, formaty. Wartości są zaokrąglane w kierunku zera.
* size = szerokość * wysokość * kanałów, pomnożona przez 3
źródło
input()
do podążenia ścieżką? Zaoszczędzi ci to 20 bajtów.import scipy
. Zmieńm.imread
namisc.imread
.NameError: name 'misc' is not defined
. Próbowałemfrom scipy import*
, też nie działa.from scipy import sum, misc as m
? Zaoszczędzisz także wtedy, gdy użyjesz sumy.R, 90 bajtów
Ścieżka do pliku PNG jest odczytywana ze STDIN. Pakiet
png
musi zostać zainstalowany.Krok po kroku:
źródło
C, 259 bajtów
Pobiera plik PPM bez komentarzy .
Proces
Kod początkowy:
Przytnij zmienne i usuń pętlę:
Stamtąd połączyłem różne instrukcje w jedną instrukcję return. Usunęliśmy go i wszelkie inne informacje o typie zewnętrznym, zmieniliśmy nazwy zmiennych i wycięliśmy spację.
źródło
Kobra - 371
źródło
Java,
449447446430426 bajtówDzięki tej odpowiedzi na przepełnienie stosu dla
String.format
lewy.źródło