[Reproduziert] OpenCV-Python-Serie von Top-Hat- und Black-Hat-Operationen (22)

Im letzten Tutorial haben wir einige Probleme hinterlassen, dh die Helligkeit ändert sich nach dem Öffnen oder Schließen des Bildes, was zu Problemen bei der späteren Bildverarbeitung führt. In diesem Tutorial stellen wir den Zylinder und das OpenCV vor Black Hat Computing zur Lösung dieser Probleme.

Zylinder

Zylinder-Berechnungen werden oft als "Zylinder-Berechnungen" übersetzt. Ist der Unterschied zwischen dem Originalbild und dem Ergebnisbild der gerade eingeführten "offenen Operation", so lautet der mathematische Ausdruck wie folgt:Fügen Sie hier eine Bildbeschreibung ein

Da das Ergebnis der Öffnungsoperation darin besteht, die Risse oder den lokalen Bereich mit geringer Helligkeit zu vergrößern, wird das Bild nach der Öffnungsoperation vom Originalbild subtrahiert, und das resultierende Effektbild hebt den helleren Bereich als den Bereich um das Originalbild hervor. Diese Operation hängt mit der Größe des ausgewählten Kerns zusammen.

Die Kappenoperation wird häufig verwendet, um Patches zu trennen, die heller als benachbarte sind. Wenn ein Bild einen großen Hintergrund hat und kleine Objekte regelmäßiger sind, können Sie den Hintergrund mithilfe der Zylinderberechnung extrahieren.

Lassen Sie uns nun einige tatsächliche Operationen ausführen. Schauen wir uns zuerst ein Bild an:
Fügen Sie hier eine Bildbeschreibung ein

Dies ist ein praktischer Fall, in dem wir über die spätere digitale Erkennung auf der Karte sprechen werden. Zuerst müssen wir das Bild zuerst in Graustufen und dann in einem Schwellenwert skalieren, damit es später bequem extrahiert werden kann. Verwenden wir zuerst OTSU. Der Algorithmus hat einen Schwellenwert:

	view plaincopy to clipboardprint?
import cv2  
import numpy as np  
  
  
img = cv2.imread('credit_card_.png')  
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
threshold = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV|  
                          cv2.THRESH_OTSU)[1]  
cv2.imshow("img",img)  
cv2.imshow("thres",threshold)  
cv2.waitKey(0)  
cv2.destroyAllWindows()  

Fügen Sie hier eine Bildbeschreibung ein

Tatsache ist, dass die Situation sehr schlecht ist. Eine solche Schwellenwertbildung ermöglicht es uns nicht, mit dem nächsten Schritt fortzufahren. Wenn wir das Originalbild betrachten, stellen wir fest, dass die Helligkeit der Schriftart und des Hintergrunds in der unteren rechten Ecke etwas hoch ist, sodass diese Situation eintreten wird. Jetzt möchte ich die Schriftart vom Hintergrund trennen. Komm raus, wir können den Zylinder verwenden, um den Vordergrund aufzuhellen:

	view plaincopy to clipboardprint?
import cv2  
import numpy as np  
  
  
img = cv2.imread('credit_card_.png')  
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(21,21))  
tophat = cv2.morphologyEx(gray,cv2.MORPH_TOPHAT,kernel)  
threshold = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV|  
                          cv2.THRESH_OTSU)[1]  
cv2.imshow("img",img)  
cv2.imshow("thres",threshold)  
cv2.waitKey(0)  
cv2.destroyAllWindows()  

Fügen Sie hier eine Bildbeschreibung ein

Mal sehen, ob dieser Effekt viel besser ist? Die digitale Schriftart in der Mitte ist vollständig getrennt. Tatsächlich verwenden wir häufig an vielen Stellen die Zylinderfunktion.

Schwarzer Hut

Die Black-Hat-Operation ist die Differenz zwischen dem Ergebnisbild der "geschlossenen Operation" und dem Originalbild. Der mathematische Ausdruck lautet:
Fügen Sie hier eine Bildbeschreibung ein

Das Effektbild nach dem Black-Hat-Vorgang hebt den dunkleren Bereich als den Bereich um den ursprünglichen Bildumriss hervor. Dieser Vorgang hängt mit der Größe des ausgewählten Kerns zusammen. Daher wird die Black-Hat-Operation verwendet, um Patches zu trennen, die dunkler als benachbarte Punkte sind. Sehr perfektes Kontur-Rendering. Schauen wir uns auch den Beispielcode an:

view plaincopy to clipboardprint?
import cv2  
import numpy as np  
  
  
img = cv2.imread('close.jpg')  
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))  
tophat = cv2.morphologyEx(gray,cv2.MORPH_BLACKHAT,kernel)  
cv2.imshow("img",img)  
cv2.imshow("thres",tophat)  
cv2.waitKey(0)  
cv2.destroyAllWindows()  

Fügen Sie hier eine Bildbeschreibung ein

Morphologischer Gradient

Betrachten wir nun die letzte Operation im morphologischen verarbeitungsmorphologischen Gradienten von OpenCV, bei der es sich im Wesentlichen um die Kantenextraktion des Bildes handelt, die auch als Ergebnis der Expansion abzüglich des Ergebnisses der Korrosion bezeichnet werden kann. Betrachten wir den tatsächlichen Effekt:

view plaincopy to clipboardprint?
import cv2  
import numpy as np  
  
  
img = cv2.imread('close.jpg')  
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))  
tophat = cv2.morphologyEx(gray,cv2.MORPH_GRADIENT,kernel)  
cv2.imshow("img",img)  
cv2.imshow("thres",tophat)  
cv2.waitKey(0)  
cv2.destroyAllWindows()  

Fügen Sie hier eine Bildbeschreibung ein

Dadurch werden die Bildränder erkannt.

Das Ende dieses Tutorials bedeutet auch das Ende des morphologischen Verarbeitungsteils von OpenCV. Tatsächlich haben wir festgestellt, dass sie alle mit einer Funktions-API aufgerufen werden können:

cv2. MorphologieEx ((

Wir haben es bereits im vorherigen Abschnitt eingeführt. Zusammenfassend kann es diese Operationen insgesamt ausführen:

(1) MORPH_OPEN: Operation öffnen

(2) MORPH_CLOSE: geschlossener Betrieb

(3) MORPH_GRADIENT: Morphologischer Gradient

(4) MORPH_TOPHAT: Zylinder

(5) MORPH_BLACKHAT: schwarzer Hut

(6) MORPH_ERODE: Korrosion

(7) MORPH_DILATE: Erweiterung

Die Verarbeitung der Bildmorphologie ist sehr wichtig, und jeder muss damit vertraut sein.

Überprüfen Sie die Artikelzusammenfassungsseite https://blog.csdn.net/weixin_44237705/article/details/107864965
Weitere technische Informationen zu openvino können in der Gruppe ~ ausgetauscht werden
Fügen Sie hier eine Bildbeschreibung ein

Ich denke du magst

Origin blog.csdn.net/weixin_44237705/article/details/108355974
Empfohlen
Rangfolge