Konwertuj dowolny obraz na szkic za pomocą Pythona

Konwertuj dowolny obraz na szkic za pomocą Pythona

Wykonanie pięknego szkicu wymaga dużo czasu i wysiłku. Na szczęście programowanie ewoluowało, dzięki czemu możesz teraz łatwo przekształcać obrazy i tworzyć piękne projekty. Imponującą techniką, którą możesz wykonać, jest przekształcenie obrazu w cyfrowy szkic.

Chociaż szkic mechaniczny nie będzie wyglądał dokładnie tak, jak twój własny rysunek ołówkiem, wynik nadal jest wart eksperymentowania. Dowiedz się, jak zaprogramować taką aplikację z wykorzystaniem modułu OpenCV w superprzyjaznym języku Python.

Moduł OpenCV

OpenCV to opracowana i utrzymywana przez firmę Intel biblioteka typu open source zawierająca metody widzenia komputerowego używane do przetwarzania obrazu i widzenia komputerowego. Ułatwia użytkownikom tworzenie zoptymalizowanych aplikacji, interakcję z obrazami i filmami w czasie rzeczywistym oraz wybór idealnego algorytmu dla ich potrzeb.

Niektóre z popularnych aplikacji OpenCV obejmują wykrywanie twarzy, automatyczne śledzenie twarzy w kinematografii, filtry mediów społecznościowych, rozpoznawanie tablic rejestracyjnych samochodów i monitoring CCTV. Aby użyć modułu OpenCV w Pythonie, otwórz terminal i wpisz następujące polecenie:

pip install opencv-python

Jak przekonwertować dowolny obraz na szkic za pomocą Pythona

Aby przekonwertować swój ulubiony obraz na szkic cyfrowy, zacznij od umieszczenia go w tym samym folderze co nowy program w Pythonie, aby ułatwić korzystanie z niego. Następnie zacznij budować swój program, wykonując następujące kroki.

Pierwszym krokiem jest zaimportowanie modułu OpenCV do swojego środowiska. Po udostępnieniu OpenCV możesz używać jego funkcjonalności do wykonywania różnych zadań. Przekaż ścieżkę pliku obrazu do funkcji imread() , aby go załadować. Zapisz swój obraz w zmiennej — zwanej tutaj image1 — do wykorzystania w przyszłości.

Zapisz tytuł okna w zmiennej o nazwie nazwa_okna . Będzie to przydatne, gdy zdecydujesz się wyświetlić obraz za pomocą funkcji imshow() . Ta funkcja wymaga dwóch parametrów: tytułu i obrazu, który chcesz wyświetlić.

import cv2

image1 = cv2.imread('image.jpg')
window_name = 'Actual image'
cv2.imshow(window_name, image1)

Po uzyskaniu pożądanego obrazu musisz wykonać pięć operacji, aby przekształcić go w szkic. Najpierw przekonwertuj kolorowy obraz na skalę szarości. Możesz to zrobić za pomocą funkcji cvtColor() . Ta funkcja pobiera obraz, którego kolory chcesz zmienić, oraz kod konwersji, taki jak COLOR_BGR2GRAY .

grey_img = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)

Po uzyskaniu obrazu w skali szarości odwróć jego kolory. W tym momencie musisz zrozumieć, w jaki sposób komputer tworzy obraz. Obraz składa się z wielu małych pikseli o różnej intensywności. Na obrazie kolorowym każdy piksel zawiera składniki czerwone, zielone i niebieskie, z których każdy ma intensywność w zakresie od 0 do 255.

Na obrazie w skali szarości są tylko odcienie szarości, więc intensywność piksela waha się od 0 do 1. Aby odwrócić intensywność pikseli tego obrazu, przekaż obraz w skali szarości do funkcji bitwise_not() .

Jak sama nazwa wskazuje, ta funkcja odwraca wartość każdego piksela do jego komplementarnego odpowiednika. Wszystkie piksele, które są większe niż 0, są ustawiane na 0, a wszystkie piksele, które są równe 0, są ustawiane na 255.

invert = cv2.bitwise_not(grey_img)

Po odwróceniu intensywności pikseli można wygładzić obraz za pomocą rozmycia gaussowskiego. Proces rozmycia gaussowskiego wykorzystuje filtr gaussowski. Filtr Gaussa to filtr dolnoprzepustowy, który przepuszcza tylko niskie częstotliwości, usuwając składową wysokiej częstotliwości sygnału lub obrazu.

Funkcja GaussianBlur() OpenCV akceptuje cztery parametry. Są to obiekt macierzowy, który działa jako obraz źródłowy, ksize (rozmiar jądra) i sigmaX (odchylenie standardowe jądra Gaussa).

Załóżmy, że masz w ręku fizyczne zdjęcie. Jeśli chcesz go rozmyć, możesz nałożyć na niego kawałki wosku lub pergaminu. Możesz sobie wyobrazić jądro jako ten przezroczysty kawałek papieru. Cyfrowo dzieje się to trochę inaczej. Aby rozmyć, wyostrzyć i zastosować inne efekty na obrazie cyfrowym, mnoży się macierz przez intensywność pikseli obrazu.

Ksze jest zawsze dodatnią liczbą nieparzystą. Gdy zwiększasz rozmiar jądra, rozmycie wzrasta. Aby zrozumieć sigmaX, załóżmy, że nakładasz wosk na papier. Podczas nakładania wosku papier staje się jednolicie przezroczysty. Podobnie, musisz utrzymywać wartości jądra blisko określonego punktu (średniej). Wartość sigmaX określa różnicę między średnią a innymi wartościami pikseli obrazu.

Przekaż odwrócony obraz, rozmiar jądra jako (21, 21) i odchylenie standardowe 0 do funkcji rozmycia gaussowskiego:

blur = cv2.GaussianBlur(invert, (21, 21), 0)

Przekaż ponownie zamazany obraz do funkcji bitwise_not(), aby go odwrócić:

invertedblur = cv2.bitwise_not(blur)

Na koniec użyj funkcji dzielenia () i wykonaj podział na element tablicy obrazów w skali szarości i tablicy obrazów odwróconego rozmycia w skali 256.

sketch = cv2.divide(grey_img, invertedblur, scale=256.0)

Zasadniczo funkcja wykonuje następującą operację:

def divide(grey_img, b, invertedblur=256.0):
    return (grey_img * scale) / invertedblur

Zapisz wynik w zmiennej o nazwie szkic. Aby zapisać ostateczny obraz, przekaż nazwę pliku wyjściowego i obrazu szkicu do funkcji imwrite() . Aby to zweryfikować można za pomocą funkcji imread() wczytać zapisany obraz szkicu, nadać tytuł okienku i wyświetlić go za pomocą funkcji imshow().

Użyj funkcji waitkey() , przekazując 0, aby wyświetlić oryginalne okno obrazu i wygenerowane okno szkicu, dopóki nie naciśniesz dowolnego klawisza.

cv2.imwrite("sketch.jpeg", sketch)
image = cv2.imread("sketch.jpeg")
window_name ='Sketch image'
cv2.imshow(window_name, image)
cv2.waitKey(0)

Połącz cały kod i masz gotowy program.

Przykładowe dane wyjściowe konwersji obrazu do szkicu za pomocą tego programu w języku Python

Możesz wybrać piękny obraz krajobrazu i przepuścić go przez program, aby wygenerować ten oszałamiający szkic cyfrowy.

Obraz do Szkicuj dom z jeziorem

Na obrazie portretowym program generuje następujący szkic cyfrowy.

Obraz do Sketch Man

Możesz eksperymentować z parametrami funkcji zgodnie z własnymi upodobaniami, aby wygenerować pożądany szkic cyfrowy.

Przetwarzanie obrazu i wizja komputerowa

Przetwarzanie obrazu i wizja komputerowa to dwie ściśle ze sobą powiązane dziedziny technologii. Oba obejmują zmianę obrazów cyfrowych w celu uzyskania pożądanych rezultatów. Przetwarzanie obrazu koncentruje się na poprawie obrazu, podczas gdy wizja komputerowa szuka wzorców i obiektów na obrazie, aby go zrozumieć.

Scikit-image to kolejna biblioteka Pythona, która zapewnia szeroką gamę funkcji przetwarzania obrazu. Ma kilka prekompilowanych modułów, filtrów, warstw, transformacji i innych. Jeśli szukasz modułu do wykorzystania w modelach głębokiego uczenia, takich jak CNN i RNN, możesz chcieć poznać Torchvision.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *