Einführung in Computer Vision mit Python (Teil 1)
Hinweis: In diesem Beitrag werden wir nur mit Graustufenbildern arbeiten, um das Verfolgen zu erleichtern.
Was ist ein Bild?
Ein Bild kann man sich als eine Wertematrix vorstellen, wobei jeder Wert die Intensität eines Pixels darstellt. Es gibt drei Haupttypen von Bildformaten:
- Binär: Ein Bild in diesem Format wird durch eine einzelne 2D-Matrix mit den Werten 0 (schwarz) und 1 (weiß) dargestellt. Es ist die einfachste Form der Bilddarstellung.
- Graustufen: In diesem Format wird ein Bild durch eine einzelne 2D-Matrix mit Werten zwischen 0 und 255 dargestellt; Dabei steht 0 für Schwarz und 255 für Weiß. Die Zwischenwerte stellen unterschiedliche Grautöne dar.
- RGB-Skala: Hier wird ein Bild durch drei 2D-Matrizen (eine für jeden Farbkanal: Rot, Grün und Blau) mit Werten zwischen 0 und 255 dargestellt. Jede Matrix enthält Pixelwerte für eine Farbkomponente, und die Kombination dieser drei Kanäle ergibt ein Vollfarbbild.
Filter
Filter sind Werkzeuge zum Ändern von Bildern durch Anwenden bestimmter Vorgänge. Ein Filter ist eine Matrix (auch Kernel genannt), die sich über das Bild bewegt und Berechnungen für die Pixelwerte in ihrem Fenster durchführt. Wir werden zwei gängige Filtertypen behandeln: Mittelwertfilter und Medianfilter.
Mittlere Filter
Ein Mittelwertfilter wird verwendet, um Rauschen zu reduzieren, indem die Pixelwerte innerhalb eines Fensters gemittelt werden. Es ersetzt das mittlere Pixel im Fenster durch den Durchschnitt aller Pixelwerte in diesem Fenster. Die Funktion cv2.blur() wendet einen Mittelwertfilter mit einer Kernelgröße von 3x3 an, was bedeutet, dass sie ein 3x3-Pixelfenster um jedes Pixel herum berücksichtigt, um den Durchschnitt zu berechnen. Dies hilft bei der Glättung des Bildes.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) # Applies a Mean Filter of size 3 x 3 blurred_image = cv2.blur(image, (3, 3)) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(blurred_image, cmap='gray') plt.title('Mean Filtered Image') plt.axis("off") plt.show()
Medianfilter
Ein Medianfilter wird verwendet, um Rauschen zu reduzieren, indem der Wert jedes Pixels durch den Medianwert aller Pixel in einem Fenster ersetzt wird. Es ist besonders wirksam bei der Beseitigung von Salz- und Pfeffergeräuschen. Die Funktion cv2.medianBlur() wendet einen Medianfilter mit einer Kernelgröße von 3 an. Diese Methode ersetzt jedes Pixel durch den Medianwert der Pixelwerte in seiner Nachbarschaft, was dabei hilft, Kanten beizubehalten und gleichzeitig Rauschen zu entfernen. Je größer die Kernelgröße, desto unschärfer wird das Bild.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) # Applies a Median Filter with a kernel size of 3 blurred_image = cv2.medianBlur(image, 3) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(blurred_image, cmap='gray') plt.title('Median Filtered Image') plt.axis("off") plt.show()
Benutzerdefinierte Filter
Sie können benutzerdefinierte Filter erstellen, um bestimmte Vorgänge auf Ihre Bilder anzuwenden. Mit der Funktion cv2.filter2D() können Sie einen beliebigen benutzerdefinierten Kernel auf ein Bild anwenden. Die Funktion cv2.filter2D() wendet einen benutzerdefinierten Kernel (Filter) auf das Bild an. Der Kernel ist eine Matrix, die die an den Pixelwerten auszuführende Operation definiert. In diesem Beispiel verbessert der Kernel bestimmte Funktionen des Bildes basierend auf den angegebenen Werten.
import cv2 import numpy as np import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) # Define a custom filter kernel kernel = np.array([[2, -1, 5], [-5, 5, -1], [0, -1, 0]]) filtered_image = cv2.filter2D(image, -1, kernel) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis('off') plt.subplot(1, 2, 2) plt.imshow(filtered_image, cmap='gray') plt.title('Filtered Image') plt.axis('off') plt.show()
Schwellenwert
Hinweis: In den Codeausschnitten sehen Sie _ , Bild, wenn Sie das Schwellenwertbild zuweisen. Dies liegt daran, dass die Funktion cv2.threshold zwei Werte zurückgibt: den verwendeten Schwellenwert und das mit einem Schwellenwert versehene Bild. Da wir nur das Schwellenwertbild benötigen, verwenden wir _, um den Schwellenwert zu ignorieren.
Thresholding wandelt ein Bild in ein Binärbild um, indem Pixelwerte basierend auf einer Bedingung festgelegt werden. Es gibt verschiedene Arten von Schwellenwerttechniken:
Globale Schwellenwerte
Einfache Schwellenwertbestimmung
Diese Methode legt einen festen Schwellenwert für das gesamte Bild fest. Pixel mit Werten über dem Schwellenwert werden auf den Maximalwert (255) gesetzt, Pixel darunter auf 0. Die Funktion cv2.threshold() wird für die einfache Schwellenwertbildung verwendet. Pixel mit einer Intensität von mehr als 127 werden auf Weiß (255) gesetzt, und Pixel mit einer Intensität kleiner oder gleich 127 werden auf Schwarz (0) gesetzt, wodurch ein Binärbild entsteht.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) _, thresholded_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(thresholded_image, cmap='gray') plt.title('Thresholded Image') plt.axis("off") plt.show()
Otsu Thresholding
Otsu's method determines the optimal threshold value automatically based on the histogram of the image. This method minimizes intra-class variance and maximizes inter-class variance. By setting the threshold value to 0 and using cv2.THRESH_OTSU, the function automatically calculates the best threshold value to separate the foreground from the background.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) _, otsu_thresholded_image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(otsu_thresholded_image, cmap='gray') plt.title("Otsu's Thresholded Image") plt.axis("off") plt.show()
Adaptive Thresholding
Mean Adaptive Thresholding
In Mean Adaptive Thresholding, the threshold value for each pixel is calculated based on the average of pixel values in a local neighborhood around that pixel. This method adjusts the threshold dynamically across different regions of the image. The cv2.adaptiveThreshold() function calculates the threshold for each pixel based on the mean value of the pixel values in a local 11x11 neighborhood. A constant value of 2 is subtracted from this mean to fine-tune the threshold. This method is effective for images with varying lighting conditions.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) mean_adaptive_thresholded_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(mean_adaptive_thresholded_image, cmap='gray') plt.title('Mean Adaptive Thresholded Image') plt.axis("off") plt.show()
Gaussian Adaptive Thresholding
Gaussian Adaptive Thresholding computes the threshold value for each pixel based on a Gaussian-weighted sum of the pixel values in a local neighborhood. This method often provides better results in cases with non-uniform illumination. In Gaussian Adaptive Thresholding, the threshold is determined by a Gaussian-weighted sum of pixel values in an 11x11 neighborhood. The constant value 2 is subtracted from this weighted mean to adjust the threshold. This method is useful for handling images with varying lighting and shadows.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) gaussian_adaptive_thresholded_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(gaussian_adaptive_thresholded_image, cmap='gray') plt.title('Gaussian Adaptive Thresholded Image') plt.axis("off") plt.show()
References
- Encord.com
- Pyimagesearch.com
- OpenCV Thresholding
- OpenCV Filtering
Das obige ist der detaillierte Inhalt vonEinführung in Computer Vision mit Python (Teil 1). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Python zeichnet sich in Gaming und GUI -Entwicklung aus. 1) Spielentwicklung verwendet Pygame, die Zeichnungen, Audio- und andere Funktionen bereitstellt, die für die Erstellung von 2D -Spielen geeignet sind. 2) Die GUI -Entwicklung kann Tkinter oder Pyqt auswählen. Tkinter ist einfach und einfach zu bedienen. PYQT hat reichhaltige Funktionen und ist für die berufliche Entwicklung geeignet.

Python ist leichter zu lernen und zu verwenden, während C leistungsfähiger, aber komplexer ist. 1. Python -Syntax ist prägnant und für Anfänger geeignet. Durch die dynamische Tippen und die automatische Speicherverwaltung können Sie die Verwendung einfach zu verwenden, kann jedoch zur Laufzeitfehler führen. 2.C bietet Steuerung und erweiterte Funktionen auf niedrigem Niveau, geeignet für Hochleistungsanwendungen, hat jedoch einen hohen Lernschwellenwert und erfordert manuellem Speicher und Typensicherheitsmanagement.

Um die Effizienz des Lernens von Python in einer begrenzten Zeit zu maximieren, können Sie Pythons DateTime-, Zeit- und Zeitplanmodule verwenden. 1. Das DateTime -Modul wird verwendet, um die Lernzeit aufzuzeichnen und zu planen. 2. Das Zeitmodul hilft, die Studie zu setzen und Zeit zu ruhen. 3. Das Zeitplanmodul arrangiert automatisch wöchentliche Lernaufgaben.

Python ist in der Entwicklungseffizienz besser als C, aber C ist in der Ausführungsleistung höher. 1. Pythons prägnante Syntax und reiche Bibliotheken verbessern die Entwicklungseffizienz. 2. Die Kompilierungsmerkmale von Compilation und die Hardwarekontrolle verbessern die Ausführungsleistung. Bei einer Auswahl müssen Sie die Entwicklungsgeschwindigkeit und die Ausführungseffizienz basierend auf den Projektanforderungen abwägen.

PythonlistsarePartThestandardlibrary, whilearraysarenot.listarebuilt-in, vielseitig und UNDUSEDFORSPORINGECollections, während dieArrayRay-thearrayModulei und loses und loses und losesaluseduetolimitedFunctionality.

Python zeichnet sich in Automatisierung, Skript und Aufgabenverwaltung aus. 1) Automatisierung: Die Sicherungssicherung wird durch Standardbibliotheken wie OS und Shutil realisiert. 2) Skriptschreiben: Verwenden Sie die PSUTIL -Bibliothek, um die Systemressourcen zu überwachen. 3) Aufgabenverwaltung: Verwenden Sie die Zeitplanbibliothek, um Aufgaben zu planen. Die Benutzerfreundlichkeit von Python und die Unterstützung der reichhaltigen Bibliothek machen es zum bevorzugten Werkzeug in diesen Bereichen.

Ist es genug, um Python für zwei Stunden am Tag zu lernen? Es hängt von Ihren Zielen und Lernmethoden ab. 1) Entwickeln Sie einen klaren Lernplan, 2) Wählen Sie geeignete Lernressourcen und -methoden aus, 3) praktizieren und prüfen und konsolidieren Sie praktische Praxis und Überprüfung und konsolidieren Sie und Sie können die Grundkenntnisse und die erweiterten Funktionen von Python während dieser Zeit nach und nach beherrschen.

Python und C haben jeweils ihre eigenen Vorteile, und die Wahl sollte auf Projektanforderungen beruhen. 1) Python ist aufgrund seiner prägnanten Syntax und der dynamischen Typisierung für die schnelle Entwicklung und Datenverarbeitung geeignet. 2) C ist aufgrund seiner statischen Tipp- und manuellen Speicherverwaltung für hohe Leistung und Systemprogrammierung geeignet.
