Spisu treści:

Proste wykrywanie kolorów za pomocą OpenCV: 6 kroków
Proste wykrywanie kolorów za pomocą OpenCV: 6 kroków

Wideo: Proste wykrywanie kolorów za pomocą OpenCV: 6 kroków

Wideo: Proste wykrywanie kolorów za pomocą OpenCV: 6 kroków
Wideo: OpenCV i wykrywanie twarzy - Projekt w Pythonie 2024, Czerwiec
Anonim
Proste wykrywanie kolorów za pomocą OpenCV
Proste wykrywanie kolorów za pomocą OpenCV

Cześć! Dzisiaj pokażę prostą metodę wykrywania koloru z wideo na żywo za pomocą OpenCV i Pythona.

Zasadniczo po prostu przetestuję, czy wymagany kolor jest obecny w ramce tła, czy nie, i za pomocą modułów OpenCV zamaskuję ten region i jednocześnie wyświetlę ramkę.

Krok 1: Pliki nagłówkowe

Pliki nagłówkowe
Pliki nagłówkowe

Teraz tutaj użyłem dwóch plików nagłówkowych, a mianowicie cv2 i NumPy. Zasadniczo cv2 to biblioteka OpenCV, która ładuje wszystkie pliki c++, które są ważne podczas używania poleceń w kodach (zawiera wszystkie definicje).

A Numpy to biblioteka Pythona, która jest niezbędna do przechowywania wielowymiarowej tablicy. Będziemy używać do przechowywania naszych współrzędnych gamy kolorów.

A numpy jako np zasadniczo pomaga naszemu kodowi nieco skrócić, używając za każdym razem np. zamiast numpy.

Krok 2: Przechwytywanie wideo

Nagrywanie wideo
Nagrywanie wideo

Jest to dość proste podczas korzystania z Pythona. Tutaj wystarczy włączyć magnetowid, aby mógł rozpocząć nagrywanie klatek.

Teraz wartość wewnątrz VideoCapture wskazuje kamerę, w moim przypadku kamera jest podłączona do mojego laptopa, więc 0.

Możesz przejść podobnie do 1 dla kamery dodatkowej i tak dalej. VideoCapture tworzy dla niego obiekt.

Krok 3: Przechwytywanie ramki i definiowanie koloru

Przechwytywanie ramki i definiowanie koloru
Przechwytywanie ramki i definiowanie koloru

Teraz musimy coś zrobić, abyśmy mogli uchwycić natychmiastową klatkę wideo, która pomoże nam wyodrębnić obraz i możemy nad tym pracować zgodnie z wymaganiami.

Pętla „while” pomoże nam uruchomić pętlę w wymaganym czasie. Teraz " _, frame = cap.read() " jest używany do sprawdzania poprawności przechwyconej ramki i jej przechowywania. "cap.read() jest zmienną logiczną i zwraca prawdę, jeśli ramka jest odczytana poprawnie i jeśli nie otrzymasz żadnych ramek, nie pokaże żadnego błędu, po prostu otrzymasz Brak.

Teraz wiersz 11 i wiersz 12 w zasadzie definiują zakres kolorów, które musimy wykryć. Do tego przyzwyczaiłem się do koloru niebieskiego.

Możesz kontynuować z dowolnym kolorem, wystarczy wpisać wartości BGR dla tego konkretnego koloru. Lepiej jest zdefiniować dwie tablice za pomocą tablic numpy, ponieważ wykrywanie określonego koloru w świecie rzeczywistym nie spełni naszego celu, a raczej zdefiniujemy zakres koloru niebieskiego, aby wykrywał w zakresie.

W tym celu zdefiniowałem dwie zmienne przechowujące dolne wartości BGR i górne wartości BGR.

Krok 4: Maskowanie i wyodrębnianie

Maskowanie i ekstrakcja
Maskowanie i ekstrakcja

Teraz nadchodzi główne zadanie zamaskowania kadru i wydobycia koloru kadru. Do maskowania użyłem predefiniowanych poleceń obecnych w bibliotece w OpenCV. Zasadniczo maskowanie to proces usuwania części ramki, tj. usuwamy piksele, których wartości BGR koloru nie leżą w zdefiniowanym zakresie kolorów i jest to wykonywane przez cv2.inRange. Następnie zastosujemy zakres kolorów do zamaskowanego obrazu w zależności od wartości pikseli, a do tego użyjemy cv2.bitwise_and, Po prostu przypisze kolory do zamaskowanego regionu w zależności od wartości maski i zakresu kolorów.

Link do cv2. bitwise_and:

Krok 5: Wreszcie wyświetlanie

Wreszcie wyświetlanie!
Wreszcie wyświetlanie!

Tutaj użyłem podstawowego cv2.imshow() do wyświetlania każdej klatki jako obrazu. Ponieważ mam dane ramki przechowywane w zmiennych, mogę je pobrać w imshow(). Tutaj pokazałem wszystkie trzy ramki, oryginalne, zamaskowane i kolorowe.

Teraz musimy wyjść z pętli while. W tym celu możemy po prostu zaimplementować cv2.wait. Key(). Zasadniczo informuje o czasie oczekiwania przed odpowiedzią. Więc jeśli przejdziesz 0, będzie czekał w nieskończoność, a 0xFF mówi, że architektura jest 64-bitowa. " ord() " określa znak, który po naciśnięciu wykona polecenie przerwania w bloku if i wyjdzie z pętli.

Następnie cap.release() zamyka rejestrator wideo, a cv2.destroyAllWindows() zamyka wszystkie otwarte okna.

Jeśli masz jakiś problem, daj mi znać.

Link do kodu źródłowego:

Zalecana: