Bildverarbeitung von Grund auf mit Python (4) Konturextraktion

Eine Reihe von Studien zur grundlegenden Bildverarbeitung von Grund auf neu (4).

Weitere Informationen finden Sie im OpenCV-Python-Tutorial Bilderkennungsbuch https://www.amazon.co.jp/dp/4061529129/ Es ist eine Politik, das Verständnis für die Verarbeitung zu fördern, in der gearbeitet wird.

Inhaltsverzeichnis

  1. Umwelt
  2. Konturextraktion
  3. Konturnäherung
  4. Externe Figur

Umgebung

Python 3.7.0 OpenCV 4.1.0 Jupyter Notebook

Konturextraktion

Führen Sie eine Konturextraktion für das binärisierte Panda-Bild durch. Die Rückgabewertkonturen von findContours sind die Koordinatensätze für jede Kontur, und die Hierarchie ist die hierarchische Struktur der Kontur. Diesmal besteht der Umriss aus zwei Ebenen. Der Umriss wurde auf dem ursprünglichen Panda-Bild gezeichnet.

rinkaku.py


import cv2
import numpy as np
from matplotlib import pyplot as plt
from pylab import rcParams #Ändern Sie die Größe der Bildanzeige
%matplotlib inline
rcParams['figure.figsize'] = 25, 20  #Bildanzeigegröße

img = cv2.imread('/brabra/6.jpg',0)
#Halten Sie das Bild komprimiert
img = cv2.resize(img, dsize=None, fx=0.15, fy=0.15)
#Binarisierung(Der Schwellenwert stammt aus der Binärisierung von Otsu)
ret,thresh = cv2.threshold(img,59,255,0)
#Umkehren
thresh= cv2.bitwise_not(thresh)

#Konturextraktion(RETR_CCOMP besteht aus zwei Schichten)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)

img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #In RGB-Format konvertieren

#Zeichnen Sie den gefundenen Umriss auf das Originalbild
for i in range(len(contours)):
    
    #Zeichne die oberste Ebene (grün)
    if hierarchy[0][i][3] == -1:        
        cv2.drawContours(img, contours, i, (0, 255, 0), 2)
    #Zeichne die zweite Ebene (hellblau)
    else:
        cv2.drawContours(img, contours, i, (0, 255, 255), 2)        

plt.imshow(img)

rinkakua.png

Obwohl es nicht perfekt ist, wird der Umriss meistens extrahiert.

Konturnäherung

Die Kontur wird mit vielen Scheitelpunkten gezeichnet, wenn auf Details geachtet wird. Wenn jedoch die Scheitelpunkte bis zu diesem Punkt nicht benötigt werden, kann die Kontur angenähert werden. Hier habe ich versucht, die Kontur des Fußteils anzunähern.

rinkakukinzi.py


img = cv2.imread('/brabra/6.jpg',0)
img = cv2.resize(img, dsize=None, fx=0.15, fy=0.15)
ret,thresh = cv2.threshold(img,59,255,0)
thresh= cv2.bitwise_not(thresh)

#Konturextraktion
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)

img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #In RGB-Format konvertieren

#Kontur des Fußteils
cnt = contours[7]

#Konturapproximation epsilon ist der Approximationsgrad
epsilon = 0.01*cv2.arcLength(cnt,True)
approx = cv2.approxPolyDP(cnt,epsilon,True)

#Zeichnen Sie eine ungefähre Kontur auf das Originalbild
cv2.drawContours(img, [approx], -1, (0, 255, 0), 2)

plt.imshow(img)

rink.png

Es war schön und eckig.

Externe Figur

Es ist möglich, eine Figur zu zeichnen, die die Kontur umschreibt. Ich zeichnete Umschreibungen, Kreise, Ellipsen und ähnliche Linien.

gaisetsu.py


img = cv2.imread('C:/brabra/6.jpg',0)
img = cv2.resize(img, dsize=None, fx=0.15, fy=0.15)
ret,thresh = cv2.threshold(img,59,255,0)
thresh= cv2.bitwise_not(thresh)

#Konturextraktion
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)

img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #In RGB-Format konvertieren

#Zeichnen Sie den Umriss des Fußes
cv2.drawContours(img, contours, 7, (0, 255, 0), 2)

cnt = contours[7]

#Externes Rechteck
x,y,w,h = cv2.boundingRect(cnt)
img0 = img.copy()
img0 = cv2.rectangle(img0,(x,y),(x+w,y+h),(0,255,0),2)

#Externes Rechteck unter Berücksichtigung der Drehung
rect = cv2.minAreaRect(cnt)
box = cv2.boxPoints(rect)
box = np.int0(box)
img00 = img.copy()
img00 = cv2.drawContours(img00,[box],0,(0,0,255),2)

#Minimaler umschreibender Kreis
(x,y),radius = cv2.minEnclosingCircle(cnt)
center = (int(x),int(y))
radius = int(radius)
img1 = img.copy()
img1 = cv2.circle(img1,center,radius,(0,255,255),2)

#Elliptische Anpassung
ellipse = cv2.fitEllipse(cnt)
img2 = img.copy()
img2 = cv2.ellipse(img2,ellipse,(255,255,0),2)

#Gerade Passform
rows,cols = img.shape[:2]
[vx,vy,x,y] = cv2.fitLine(cnt, cv2.DIST_L2,0,0.01,0.01)
lefty = int((-x*vy/vx) + y)
righty = int(((cols-x)*vy/vx)+y)
img3 = img.copy()
img3 = cv2.line(img3,(cols-1,righty),(0,lefty),(255,255,255),2)

plt.subplot(231),plt.imshow(img0)
plt.title('en'), plt.xticks([]), plt.yticks([])
plt.subplot(232),plt.imshow(img00)
plt.title('en'), plt.xticks([]), plt.yticks([])
plt.subplot(233),plt.imshow(img1)
plt.title('en'), plt.xticks([]), plt.yticks([])
plt.subplot(234),plt.imshow(img2)
plt.title('daen'), plt.xticks([]), plt.yticks([])
plt.subplot(235),plt.imshow(img3)
plt.title('line'), plt.xticks([]), plt.yticks([])

plt.show()

gaisetsu.png

Zusammenfassung

Ich vertiefte mein Verständnis der Konturextraktion.

Verweise

--Bilderkennung (professionelle Serie für maschinelles Lernen) https://www.amazon.co.jp/dp/4061529129/

Recommended Posts

Bildverarbeitung von Grund auf mit Python (4) Konturextraktion
Bildverarbeitung von Grund auf mit Python (5) Fourier-Transformation
Bildverarbeitung mit Python
Bildverarbeitung mit Python (Teil 2)
Bildverarbeitung mit Python (Teil 1)
Bildverarbeitung mit Python (3)
[Python] Bildverarbeitung mit Scicit-Image
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Python-Bildverarbeitung
Grundlagen der binärisierten Bildverarbeitung durch Python
Bildverarbeitung mit Python 100 Knock # 10 Medianfilter
100 Bildverarbeitung mit Python Knock # 8 Max Pooling
Geschäftseffizienz von Grund auf mit Python
Bildverarbeitung mit Python & OpenCV [Tonkurve]
Bildaufnahme von der Kamera mit Python + OpenCV
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow
Die Bildverarbeitung mit Python 100 führt zu einem durchschnittlichen Pooling von # 7
Leichte Bildverarbeitung mit Python x OpenCV
Bildverarbeitung mit Python 100 Knock # 9 Gauß-Filter
Erste Python-Bildverarbeitung
Bildverarbeitung mit Python Environment Setup für Windows
Bildverarbeitung mit PIL
Flächenextraktionsmethode mit dem Zellautomaten Versuchen Sie die Flächenextraktion aus dem Bild mit Growcut (Python).
So kratzen Sie Bilddaten von Flickr mit Python
Hinweise zur HDR- und RAW-Bildverarbeitung mit Python
Lesen Sie den QR-Code aus der Bilddatei mit Python (Mac).
100 Sprachverarbeitungsklopfen mit Python 2015
Bildverarbeitung mit PIL (Pillow)
Akustische Signalverarbeitung mit Python (2)
Sortieren von Bilddateien mit Python (2)
Sortieren von Bilddateien mit Python (3)
Tweet mit Bild in Python
Bilddateien mit Python sortieren
Bildverarbeitung mit Python (Pillow)
Bildverarbeitungssammlung in Python
Mit Skype benachrichtigen Sie mit Skype von Python!
[Lass uns mit Python spielen] Bildverarbeitung zu Monochrom und Punkten
Schneiden Sie ein Bild mit Python aus
Grundlagen der Echtzeit-Bildverarbeitung mit opencv
Rufen Sie C von Python mit DragonFFI auf
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
[Python] Einfache Parallelverarbeitung mit Joblib
Verwenden von Rstan aus Python mit PypeR
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
Installieren Sie Python von der Quelle mit Ansible
Textextraktion mit AWS Textract (Python3.6)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
Persönliche Notizen für die Python-Bildverarbeitung
Führen Sie Aprili von Python auf Orange aus
Lassen Sie uns mit Python Image Scraping durchführen
Rufen Sie Python von Nim mit Nimpy auf
Finden Sie Bildähnlichkeit mit Python + OpenCV
Bildverarbeitung | Vorhersage von Arten aus Bildern
Laden Sie fbx aus Python mitinema4d
Sende Bild mit Python und speichere mit PHP
Erzeugung von Verlaufsbildern mit Python [1] | np.linspace
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren