Last chance! 50% off DataCamp Premium
Sale ends in
OpenCV, de Open Source Computer Vision Library, is een krachtige open-source bibliotheek die veel wordt gebruikt in computer vision-projecten. OpenCV is ontworpen om een geïntegreerd framework te bieden voor real-time computer vision en fungeert als een platform dat tal van toepassingen voor beeld- en videoanalyse mogelijk maakt.
De OpenCV-bibliotheek speelt een cruciale rol bij het in staat stellen van ontwikkelaars en onderzoekers om de voordelen van visuele dataverwerking te benutten. De mogelijkheden bestrijken uiteenlopende toepassingen, van basale beeldbewerking tot complexere taken zoals objectidentificatie en gezichtsherkenning. Door een uitgebreide verzameling algoritmen, methoden en bewerkingshandelingen voor beelddata te bieden, faciliteert OpenCV de ontwikkeling van intelligente systemen die visuele inhoud kunnen herkennen en classificeren.
Een opvallende toepassing van OpenCV is objectherkenning, waarbij de algoritmen helpen om objecten in afbeeldingen of videostreams te identificeren en te lokaliseren. Deze mogelijkheid strekt zich ook uit tot andere computer vision-taken, zoals gezichtsherkenning, bewegingsdetectie en ondersteuning voor augmented reality-technologieën.
In dit artikel behandelen we het volgende:
Voor deze OpenCV-tutorial heb je middelgrote kennis van Python nodig en een basisbegrip van computer vision. Vertrouwdheid met principes van beeldbewerking verbetert de leerervaring tijdens de tutorial, hoewel kernconcepten worden uitgelegd wanneer ze aan bod komen.
!pip install opencv-python
Gebruik het volgende commando als je Anaconda gebruikt:
!conda install -c conda-forge opencv
Om te bevestigen dat de installatie is geslaagd, voer je de volgende code uit in een Python-interpreter of Jupyter Notebook:
import cv2
print(cv2.__version__)
Bij een succesvolle installatie wordt het versienummer van de geïnstalleerde OpenCV-bibliotheek geprint. Als er geen versienummer in de terminal of console verschijnt, betekent dit dat het installatieproces niet is geslaagd.
Belangrijke opmerking voor Google Colab: Om code aan te passen voor het tonen van afbeeldingen in Google Colab-notebooks, moet je de traditionele functie cv2.imshow vervangen door cv2_imshow uit de specifieke bibliotheken van Google Colab. Deze aanpassing zorgt voor compatibiliteit met de Colab-omgeving, die cv2.imshow niet ondersteunt. Importeer hiervoor de functie cv2_imshow uit de patches van Google Colab als volgt:
from google.colab.patches import cv2_imshow
# Displaying an image in a window
cv2_imshow(image)
Onderstaande codefragment is een fundamenteel startpunt voor het gebruik van de OpenCV-bibliotheek voor beeldbewerking. Het laden van een afbeelding in een ontwikkelomgeving komt voor in allerlei situaties, van eenvoudige computer vision-projecten tot complexe real-time objectdetectietoepassingen in productie. Het weergeven van een afbeelding is ook essentieel om de inhoud of het bewerkingsresultaat te bekijken. In de onderstaande code lezen we een JPG-bestand en tonen we die met de OpenCV-bibliotheek.
Het volgende codefragment kun je gebruiken om afbeeldingen te laden en weer te geven in OpenCV:
import cv2
# Loading image from a file
image = cv2.imread('your/image/path.jpg')
# Displaying an image in a window
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Kantoormedewerkers rond een laptop. Bron: Canva
In deze code wordt de afbeelding uit een bestand gelezen met ‘cv2.imread’ en vervolgens in een venster weergegeven met ‘imshow’. De functie 'cv2.waitKey(0)' zorgt ervoor dat het venster open blijft totdat de gebruiker een toets indrukt om het te sluiten.
Beeldbewerking is het manipuleren van pixeldata in een afbeelding op zo’n manier dat de visuele verschijning van de oorspronkelijke afbeelding verandert, bijvoorbeeld voor feature-extractie, beeldanalyse of andere computer vision-taken. Voorbeelden van beeldbewerkingstechnieken zijn kleurverwerking, filtering, segmentatie, randdetectie, enz.
Onderstaand codefragment demonstreert een eenvoudige beeldbewerkingstechniek op de eerder geladen afbeelding. De techniek hier is een eenvoudige kleurconversie, specifiek een grijswaardenconversie. Grijswaardenconversie is een basistechniek in beeldbewerking waarbij de afbeelding wordt teruggebracht tot één kanaal met intensiteitswaarden.
# Converting an image to grayscale form
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Displaying the grayscale image
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Hier converteert cv2.cvtColor() de geladen afbeelding naar grijswaarden.

Kantoormedewerkers rond een laptop (grijswaarden). Bron: Canva
Randdetectie is een fundamentele techniek in beeldbewerking en computer vision. Het identificeert punten in een afbeelding waar de helderheid sterk verandert of onderbroken is. Randdetectie is essentieel in computer vision, vooral bij het detecteren van kenmerken in beelddata. Randdetectie werkt doorgaans door scherpe veranderingen in pixelintensiteiten op te sporen. Door deze punten met sterke helderheidsveranderingen te verbinden, ontstaan lijnen en randen die objecten in een afbeelding omlijnen.
Met randdetectie-algoritmen kunnen piepkleine textuur- en structuureigenschappen van een object in een afbeelding worden opgespoord.
Verschillende randdetectie-algoritmen, zoals de Canny Edge Detector, de Sobel-methode en de Fuzzy Logic-methode, worden gebruikt in objectherkenning, beeldsegmentatie en feature-extractie. Het volgende codefragment laat basale randdetectie met OpenCV zien:
# Applying Canny edge detection (a simple edge detection method)
edges = cv2.Canny(gray_image, 50, 150)
# Displaying the edge-detected image
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
Het Canny-randdetectie-algoritme is direct beschikbaar in de OpenCV-bibliotheek via de onderliggende functie ‘cv2.Canny()’, die randen in de grijswaardenafbeelding detecteert.

Kantoormedewerkers rond een laptop (grijswaarden). Bron: Canva
Afbeeldingen schalen en roteren zijn fundamentele vereisten voor beeldbewerking omdat ze de aanpassing en transformatie van visuele inhoud mogelijk maken. Schalen van een afbeelding betekent de afmetingen wijzigen, vergroten of verkleinen, en is essentieel voor het passend maken van afbeeldingen in specifieke omgevingen.
Roteren is een aanpassing die de hoek verandert waaronder je een afbeelding bekijkt volgens een opgegeven rotatiehoek. Beide bewerkingen worden vaak toegepast als pre-processingstappen voor uiteenlopende doelen, waaronder computer vision, machine learning en grafische toepassingen. Bij het trainen van diepe neurale netwerken zijn roteren en schalen bijvoorbeeld data-augmentatietechnieken die worden gebruikt om de variatie in de trainingsdata te vergroten. Het doel van data-augmentatie is het netwerk trainen met een dataset met voldoende variatie, zodat het getrainde netwerk goed kan generaliseren naar ongeziene data.
Om afbeeldingen te schalen en te roteren met OpenCV, kun je de volgende code gebruiken:
# Resizing the image
resized_image = cv2.resize(image, (width, height))
# Rotating the image by 45 degrees
rotation_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), 45, 1)
rotated_image = cv2.warpAffine(resized_image, rotation_matrix, (width, height))
# Displaying the resized and rotated images
cv2.imshow('Resized Image', resized_image)
cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Waarbij 'cv2.resize' wordt gebruikt om de afbeelding te schalen, en 'cv2.getRotationMatrix2D' samen met 'cv2.warpAffine' beide worden gebruikt om de afbeelding te roteren.

Kantoormedewerkers rond een laptop (geroteerd). Bron: Canva
Video's zijn een reeks afbeeldingen die opeenvolgend worden getoond. In computer vision zijn videobewerkingsmogelijkheden cruciaal voor het ontwikkelen en bouwen van toepassingen die realtime en opgenomen data verwerken. In tegenstelling tot het statische karakter van afbeeldingen, houdt videobewerking zich bezig met temporele reeksen van afbeeldingen, waardoor analyse van beweging, veranderingen in de tijd en extractie van temporele patronen mogelijk wordt.
Het dynamische karakter van inhoud in videodata vereist dat videobewerkingstechnieken efficiënt zijn, vooral in kritieke systemen, bijvoorbeeld in toepassingen zoals bewaking, autonoom rijden, activiteitsherkenning en meer, waar begrip van beweging en verandering essentieel is.
Een belangrijk voordeel van het gebruik van OpenCV voor videobewerkingstaken is de beschikbaarheid van een reeks uitgebreide functies die zijn ontworpen om videostreams efficiënt te verwerken. OpenCV biedt tools voor videocaptatie, -verwerking en -analyse, net zoals voor afbeeldingen.
Het volgende codefragment kan worden gebruikt om een lokaal opgeslagen video te laden en te verwerken:
import cv2
# Open a video capture object
cap = cv2.VideoCapture("Your video's path.mp4")
# To check if the video has opened successfully of not
if not cap.isOpened():
print("Error: Couldnot open the video.")
exit()
# Loop through the video frames
while True:
# Reading a frame from the video
ret, frame = cap.read()
# Break the loop if the video has ended
if not ret:
break
# Display the original frame
cv2.imshow('Original Video', frame)
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('Black and White Video', gray_frame)
# Perform edge detection on the video
edges_frame = cv2.Canny(gray_frame, 50, 150)
cv2.imshow('Edges Video', edges_frame)
# Break the loop if 'q' key is pressed
if cv2.waitKey(25) & 0xFF == ord('q'):
break
# Release the video capture object and close all windows
cap.release()
cv2.destroyAllWindows()
In deze code wordt de klasse ‘cv2.VideoCapture’ gebruikt om een videobestand te openen en frames te lezen via de methode ‘cap.read'. Vervolgens wordt eerst de originele video getoond, daarna omgezet naar zwart-wit en ten slotte wordt in elk frame randdetectie uitgevoerd. De lus draait totdat de video leeg is of totdat invoer van het toetsenbord wordt gegeven om te stoppen. De ‘cv2.waitKey(25)’ zorgt voor een korte vertraging tussen de frames om ze weer te geven en zo een vloeiende weergave te garanderen.
Objectdetectie is een fundamentele computer vision-taak die is gericht op het detecteren en lokaliseren van objecten in een afbeelding of video en het geven van herkenningsresultaten – een lijst met gedetecteerde klasselabels en bijbehorende begrenzingsvakken. Personendetectie, een variant van objectherkenning, richt zich op het identificeren en lokaliseren van mensen binnen visuele informatie.
Toepassingen van personendetectie omvatten bewaking, crowdmanagement, mensen tellen, tracking, mens-computerinteractie en slimme omgevingen. Bij bewaking helpt deze technologie bij het detecteren van verdachte activiteiten, terwijl het bij crowdmanagement ondersteuning biedt voor gebarenherkenning en tracking. Personendetectie speelt een cruciale rol in mens-computerinteractie en wordt ook ingezet in slimme omgevingen voor middelenoptimalisatie en betere beveiliging.
YOLO, een acroniem voor "You Only Look Once", is uitgegroeid tot een veelgebruikt systeem dat efficiënt real-time objectherkenning bereikt. In tegenstelling tot klassieke methoden voor objectdetectie, verdeelt YOLO de afbeelding in een raster van cellen en voorspelt het gelijktijdig begrenzingsvakken en klassescores voor elke cel.
Je kunt meer lezen over YOLO-objectdetectie in onze uitgebreide gids.
Hieronder staat een codefragment dat OpenCV en Yolo gebruikt voor personendetectie in een afbeelding:
import cv2
net = cv2.dnn.readNet('yolov3.weights', 'yolov3.cfg')
layer_names = net.getUnconnectedOutLayersNames()
image = cv2.imread('image path.jpg')
height, width = image.shape[:2]
blob = cv2.dnn.blobFromImage(image, 1/255.0, (416, 416), swapRB=True, crop=False)
net.setInput(blob)
outs = net.forward(layer_names)
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5 and class_id == 0: # Class ID for person
box = detection[:4] * np.array([width, height, width, height])
(x, y, w, h) = box.astype(int)
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow('Person Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Op vergelijkbare wijze volgt de codestructuur dezelfde principes voor personendetectie in een video. In plaats van één statische afbeelding te verwerken, verwerkt het script of de applicatie continu videoframes.
Hetzelfde principe ligt ten grondslag aan het identificeren van mensen in zowel afbeeldingen als videoclips, met als belangrijkste verschil de factor tijd. Bij afbeeldingen gaat het om het herkennen en positioneren van mensen in afzonderlijke statische frames.
Deze toepassing is het meest geschikt voor bewakingsmomentopnamen en andere niet-overlappende foto’s. Bij video’s daarentegen is het doel om individuen te identificeren en te volgen terwijl ze in opeenvolgende frames bewegen. Dit wordt soms objecttracking in video’s genoemd. Het temporele aspect is cruciaal bij het bekijken van menselijke bewegingen en interacties in de tijd, waardoor op video gebaseerde personendetectie een essentieel hulpmiddel is voor realtime toepassingen, waaronder beveiligingsbewaking, crowdmonitoring en gedragsanalyse.
Andere praktijktoepassingen van personendetectie zijn slimme steden, retailanalyse en openbare veiligheid. Er zijn echter ethische overwegingen rond privacykwesties, toestemming en misbruik van de technologie. Verantwoorde inzet in verschillende domeinen wordt bereikt door de voordelen en ethische zorgen in balans te brengen.
Deze tutorial liet de basisaspecten zien van werken met de OpenCV-bibliotheek voor uiteenlopende computer vision-taken. We begonnen met de basis en lieten zien hoe je OpenCV installeert in een Python-omgeving. OpenCV-bewerkingen voor het laden en weergeven van afbeeldingen kwamen aan bod, samen met beeldbewerkingstechnieken zoals converteren naar grijswaarden en het toepassen van randdetectie. Al met al is duidelijk dat OpenCV geavanceerde beeldtransformaties en -analyse kan uitvoeren, waaronder het toepassen van beeldbewerkingstechnieken op videoframes.
OpenCV speelt met name een cruciale rol in toegepaste computer vision, omdat het veelzijdigheid en robuuste mogelijkheden biedt waarmee computer vision-ingenieurs en machine learning-practitioners veel uitdagingen rond visuele dataverwerking kunnen aanpakken. Het belangrijkste voordeel van het gebruik van de OpenCV-bibliotheek is dat het het toepassen van computer vision-algoritmen stroomlijnt en applicatieconcepten efficiënt naar praktische implementaties vertaalt.
Verdiep je begrip van de concepten die in dit artikel zijn besproken door dieper in te gaan op beeldbewerking in Python via een zorgvuldig samengestelde cursus. Deze cursus verbreedt je toolkit voor beeldbewerking en computer vision met extra bibliotheken zoals Sci-kit Image en Numpy.
Maker van machinelearning-content met 1M+ weergaven — computer vision-engineer. Geïnteresseerd in kennis opdoen en delen over technologie en financiën
Begin vandaag nog met je Python-reis!
Cursus
Cursus
Cursus

blog
Adel Nehme
15 min