Az OpenCV alapjainak elsajátításával kezdtük, majd elvégeztünk néhány alapvető képfeldolgozást és manipulációt a képeken, majd Image szegmentálások és sok más művelet történt OpenCV és python nyelv segítségével. Itt, ebben a részben néhány egyszerű objektumdetektálási technikát hajtunk végre sablonillesztés segítségével. Megtalálunk egy tárgyat egy képen, majd leírjuk annak jellemzőit. A jellemzők a kép közös attribútumai, például sarkok, élek stb. Megtekintünk néhány olyan elterjedt és népszerű tárgyfelismerési algoritmust is, mint a SIFT, SURF, FAST, BREIF és ORB.
Amint azt a korábbi oktatóanyagok elmondták, az OpenCV az Open Source Commuter Vision Library, amely C ++, Python és Java interfészekkel rendelkezik, és támogatja a Windows, Linux, Mac OS, iOS és Android operációs rendszereket. Így könnyen telepíthető a Raspberry Pi-be Python és Linux környezettel. Az OpenCV-vel és a csatlakoztatott kamerával rendelkező Raspberry Pi sok valós idejű képfeldolgozó alkalmazás létrehozására használható, például Arcfelismerés, Arczár, Objektumkövetés, Autószámtábla-felismerés, Otthoni biztonsági rendszer stb.
Az objektum-észlelés és -felismerés képezi a számítógépes látás legfontosabb felhasználási esetét, ezeket olyan erőteljes dolgokra használják, mint pl
- Jelenetek címkézése
- Robotnavigáció
- Önvezető autók
- Testfelismerés (Microsoft Kinect)
- Betegség és rák kimutatása
- Arcfelismerő
- Kézírás-felismerés
- Objektumok azonosítása műholdas képeken
Object Detection VS felismerés
Az objektumfelismerés az objektumfelismerés második szintje, amelyben a számítógép képes felismerni egy objektumot egy kép több objektumáról, és képes lehet azonosítani azt.
Most néhány képfeldolgozási funkciót fogunk végrehajtani, hogy objektumot keressünk egy képből.
Objektum keresése képből
Itt a sablonillesztést fogjuk használni a karakter / objektum megtalálásához egy képben, az OpenCV cv2.matchTemplate () függvényét az objektum megtalálásához.
import cv2 import numpy mint np
Töltse be a bemeneti képet és alakítsa át szürkévé
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('emberek', image) cv2.waitKey (0) szürke = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Töltse be a sablonképet
template = cv2.imread ('waldo.jpg', 0) # az objektum sablonegyeztetésének eredménye egy kép eredménye felett = cv2.matchTemplate (szürke, sablon, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (eredmény)
Hozzon létre határoló mezőt
top_left = max_loc # a határoló téglalap méretének növelése 50 képponttal bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('objektum megtalálva', image) cv2.waitKey (0) cv2.destroyAllWindows ()
A cv2.matchTemplate (szürke, sablon, cv2.TM_CCOEFF) mezőbe írja be a szürkeárnyalatos képet az objektum és a sablon megkereséséhez. Ezután alkalmazza a sablonillesztési módszert az objektumok megtalálásához a képből, itt a cv2.TM_CCOEFF használatos.
Az egész függvény egy tömböt ad vissza, amelyet beírnak az eredménybe, ami a sablonillesztési eljárás eredménye.
Ezután használjuk a cv2.minMaxLoc (result) parancsot , amely megadja a koordinátákat vagy a határoló mezőt, ahol az objektum egy képen megtalálható, és amikor megkapjuk ezeket a koordinátákat, téglalapot rajzolunk rá, és kinyújtjuk a doboz kis méreteit, így a az objektum könnyen elfér a téglalap belsejében.
Számos módszer létezik a sablonillesztés végrehajtására, és ebben az esetben a cv2.TM_CCOEFF-et használjuk, amely a korrelációs együtthatót jelenti.
Itt a kulcspontok (X, Y) koordináták, amelyeket szitdetektor segítségével vonnak ki, és a kép fölé rajzolják a cv2 rajz kulcspont funkcióval.
HULLÁMTÖRÉS
import cv2 import numpy as np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Hozzon létre SURF Feature Detector objektumot, itt állítjuk be a hessianus küszöböt 500-ra
surf = cv2.xfeatures2d.SURF_create (500) kulcspont, leíró = surf.detectAndCompute (szürke, Nincs) print ("Az észlelt kulcspontok száma:", len (kulcspontok))
Rajzoljon gazdag kulcspontokat a bemeneti képre
image = cv2.drawKeypoints (kép, kulcspontok, Nincs, zászlók = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - SURF', image) cv2.waitKey () cv2.destroyAllWindows ()
Konzol kimenet:
GYORS
import cv2 import numpy as np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
FAST Detector objektum létrehozása
fast = cv2.FastFeatureDetector_create () # Kulcspontok megszerzése , alapértelmezés szerint a nem max elnyomás Be van kapcsolva, hogy kikapcsolja a set fast.setBool ('nonmaxSuppression', False) kulcspontokat = fast.detect (szürke, Nincs) print (" Kulcspontok száma Észlelve: ", len (kulcspontok))
Rajzoljon gazdag kulcspontokat a bemeneti képre
image = cv2.drawKeypoints (kép, kulcspontok, Nincs, zászlók = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - FAST', image) cv2.waitKey () cv2.destroyAllWindows ()
Konzol kimenet:
RÖVID
import cv2 import numpy as np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Készítsen FAST detektor objektumot
short = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Hozzon létre RÖVID kivonó objektumot
#brief = cv2.DescriptorExtractor_create ("BRIEF") # Kulcspontok meghatározása kulcspontok = fast.detect (szürke, Nincs)
Szerezzen leírókat és új végső kulcspontokat a BRIEF használatával
keypoints, descriptors = brief.compute (szürke, keypoints) print ("Észlelt kulcspontok száma:", len (keypoints))
Rajzoljon gazdag kulcspontokat a bemeneti képre
image = cv2.drawKeypoints (kép, kulcspontok, Nincs, zászlók = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - BRIEF', image) cv2.waitKey () cv2.destroyAllWindows ()
Konzol kimenet:
GÖMB
import cv2 import numpy as np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
ORB objektum létrehozása, megadhatjuk a kívánt kulcspontok számát
orb = cv2.ORB_create () # Kulcspontok meghatározása kulcspontok = orb.detect (szürke, Nincs)
Szerezze be a leírókat
kulcspontok, leírók = orb.számítás (szürke, kulcspontok) nyomtatás ("Észlelt kulcspontok száma:", len (kulcspontok))
Rajzoljon gazdag kulcspontokat a bemeneti képre
image = cv2.drawKeypoints (kép, kulcspontok, Nincs, zászlók = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - ORB', image) cv2.waitKey () cv2.destroyAllWindows ()
Konzol kimenet:
Megadhatjuk azon kulcspontok számát, amelyek maximális határa 5000, azonban az alapértelmezett érték 500, azaz az ORB automatikusan észleli a legjobb 500 kulcspontot, ha nincs megadva a kulcspontok egyik értékéhez sem.
Tehát így történik az objektumfelismerés az OpenCV-ben, ugyanazok a programok futtathatóak az OpenCV telepített Raspberry Pi programjában is, és hordozható eszközként használhatók, mint például a Google Lens technológiájú okostelefonok.
Ezt a cikket a Master Computer Vision ™ OpenCV4 Python-ban, az Udemy-re vonatkozó mélytanulási tanfolyammal készítették, Rajeev Ratan készítette. Iratkozzon fel rá, hogy többet tudjon meg a Computer Vision-ről és a Pythonról.