Czytelnicy tacy jak ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską. Czytaj więcej.

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, nadal warto poeksperymentować. 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.

instagram viewer

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

pip zainstaluj 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.

Ten przykładowy kod jest dostępny w Repozytorium GitHub i jest darmowy do użytku na licencji MIT.

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 pliku przeczytaj() funkcję, aby go załadować. Zapisz swój obraz w zmiennej — o nazwie obraz1 tutaj — 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ą pokaż() funkcjonować. Ta funkcja wymaga dwóch parametrów: tytułu i obrazu, który chcesz wyświetlić.

import cv2

obraz1 = cv2.odczytany(„obraz.jpg”)
nazwa_okna = „Rzeczywisty obraz”
cv2.imshow (nazwa_okna, obraz1)

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ą cvtKolor() funkcjonować. Ta funkcja pobiera obraz, którego kolory chcesz zmienić, oraz kod konwersji, taki jak KOLOR_BGR2SZARY.

grey_img = cv2.cvtColor (obraz1, 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 występują 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 bitwise_not() funkcjonować.

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.

odwróć = cv2.bitwise_not (szary_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.

OpenCV Rozmycie Gaussa() funkcja przyjmuje 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:

rozmycie = cv2.GaussianBlur (odwróć, (21, 21), 0)

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

odwrócone rozmycie = cv2.bitwise_not (rozmycie)

Na koniec użyj tzw dzielić() funkcji i wykonać podział na element tablicy obrazu w skali szarości i tablicy obrazu odwróconego rozmycia w skali 256.

szkic = cv2.divide (szary_img, odwrócone rozmycie, skala =256.0)

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

pokdzielić(szary_img, b, odwrócone rozmycie=256.0):
powrót (grey_img * skala) / odwrócone rozmycie

Zapisz wynik w zmiennej o nazwie szkic. Aby zapisać ostateczny obraz, przekaż nazwę pliku wyjściowego i obrazu szkicu do pliku imwpisz() funkcjonować. 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 klawisz oczekiwania() funkcję, przekazując 0, aby wyświetlić oryginalne okno obrazu i wygenerowane okno szkicu, dopóki nie naciśniesz dowolnego klawisza.

cv2.imwrite(„szkic.jpeg”, szkic)
obraz = cv2.imread(„szkic.jpeg”)
nazwa_okna =„Obraz szkicu”
cv2.imshow (nazwa_okna, obraz)
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.

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

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.