Je pense qu'il existe différentes manières de traiter horizon, etc. Pensons au traitement d'horizon, etc. en utilisant la conversion de morphologie OpenCV en python. La conversion morphologique fait généralement référence à un traitement tel que le traitement d'expansion et de contraction. Spécifions un noyau extrême (élément structurel) pour cela. C'est une sorte de truc.
Le traitement d'image est effectué comme suit.
Le noyau (élément structurel) est généré comme suit.
Noyau 10x1(Éléments structurels)Pour l'extraction de lignes horizontales
>>> cv2.getStructuringElement(cv2.MORPH_RECT,(20,1))
array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]],
dtype=uint8)
Noyau 1x10(Éléments structurels)Pour l'extraction de lignes verticales
>>> cv2.getStructuringElement(cv2.MORPH_RECT, (1,10))
array([[1],
[1],
[1],
[1],
[1],
[1],
[1],
[1],
[1],
[1]], dtype=uint8)
À propos, l'expansion et la contraction générales sont également répertoriées.
Noyau généralement rectangulaire(Éléments structurels)
>>> cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]], dtype=uint8)
horizontal = cv2.erode(horizontal, hKernel)
horizontal = cv2.dilate(horizontal, hKernel)
Le délai est exécuté après l'exécution de l'érosion.
Découvrez comment les lignes horizontales sont traitées.
morph_delta.py
import numpy as np
import cv2
import sys
#Affichage de l'image
def showImage(winname, img):
cv2.imshow(winname, img)
cv2.moveWindow(winname, 500, 0)
cv2.waitKey(0)
cv2.destroyWindow(winname)
def main(imagefile):
#chargement d'image
src = cv2.imread(imagefile,cv2.IMREAD_GRAYSCALE)
if src is None:
print ('Error image: ' + imagefile)
return -1
#Inverser et binariser
gray = cv2.bitwise_not(src)
binimage = cv2.adaptiveThreshold(gray, 255,
cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY, 15, -2)
#Affichage binaire
showImage("BINARIZE", binimage)
for hv in range(50, 301, 50):
morphHorizontalLine(binimage, hv)
for vv in range(2, 17, 2):
morphVerticalLine(binimage, vv)
return 0
#Transformation morphologique Extraire des lignes horizontales
# hor_taille Extraire la ligne horizontale
#Paramètres d'élément structurel de transformation morphologique
def morphHorizontalLine(binimage, hor_size):
horizontal = np.copy(binimage)
#Calcul de l'horizon par morphologie
#Générer des éléments structurels pour l'extraction.
hKernel = cv2.getStructuringElement(cv2.MORPH_RECT,
(hor_size, 1))
#Extraire des lignes horizontales par calcul de morphologie
horizontal = cv2.erode(horizontal, hKernel)
horizontal = cv2.dilate(horizontal, hKernel)
cap = 'hor_size=%d' % (hor_size)
cv2.putText(horizontal, cap, (10,25),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255), 1,cv2.LINE_AA)
#Affichage d'image Horizon
showImage("HORIZONTAL LINES", horizontal)
#Transformation morphologique Extraire des lignes verticales
# ver_taille Extraire les lignes verticales
#Paramètres d'élément structurel de transformation morphologique
def morphVerticalLine(binimage, ver_size):
vertical = np.copy(binimage)
#Lignes verticales par calcul de morphologie
#Générer des éléments structurels pour l'extraction.
hKernel = cv2.getStructuringElement(cv2.MORPH_RECT,
(1,ver_size))
#Extraire des lignes horizontales par calcul de morphologie
vertical = cv2.erode(vertical, hKernel)
vertical = cv2.dilate(vertical, hKernel)
cap = 'ver_size=%d' % (ver_size)
cv2.putText(vertical, cap, (10,25),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255), 1,cv2.LINE_AA)
#Affichage d'image Horizon
showImage("VERTICAL LINES", vertical)
if __name__ == "__main__":
main('image/Delta.png')
Windows10 Anaconda python 3.7.6 OpenCV 3.4.1
hor_size = 50 est traité par le noyau (50,1) (élément structurel). hor_size = 100 exécute jusqu'à (100,1), (300,1).
La ligne verticale et la courte ligne horizontale en haut disparaissent.
ver_size = 2 est traité par le noyau (1,2) (élément structurel). ver_size = 6 est exécuté comme (1,6), (1,8). La ligne horizontale a disparu. bon sentiment.
Maintenant que nous connaissons le mouvement de conversion morphologique, nous allons appliquer les cinq lignes de la partition. Je vais essayer de le traiter. Au fait, le score est "Gunkan March" qui semble être en plein essor. Le début est extrait.
morph_lines.py
import numpy as np
import cv2
import sys
#Affichage de l'image
def showImage(winname, img):
cv2.imshow(winname, img)
cv2.moveWindow(winname, 500, 0)
cv2.waitKey(0)
cv2.destroyWindow(winname)
def main(imagefile):
#chargement d'image
src = cv2.imread(imagefile, cv2.IMREAD_GRAYSCALE)
if src is None:
print ('Error image: ' + imagefile)
return -1
#Inverser et binariser
gray = cv2.bitwise_not(src)
binimage = cv2.adaptiveThreshold(gray, 255,
cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 15, -2)
#Affichage binaire
showImage("BINARIZE", binimage)
morphLine(binimage, 5)
return 0
#Transformation morphologique
# ver_taille Extraction de la ligne horizontale Transformation morphologique
def morphLine(binimage, ver_size):
#Génération de tampon d'image pour l'extraction de lignes horizontales
vertical = np.copy(binimage)
#Générer des éléments structurels pour extraire des lignes verticales par calcul de morphologie.
vKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, ver_size))
#Extraire des lignes verticales par calcul de morphologie
vertical = cv2.erode(vertical, vKernel)
vertical = cv2.dilate(vertical, vKernel)
#Afficher l'image de la ligne verticale
showImage("VERTICAL LINES", vertical)
# 1)Extraire les bords
# 2)Expansion dilatée(contour_edge)
# 3)Lisse lisse
# 4)Fusionner l'image de la ligne verticale et le bord
#Extraire les bords du contour et lisser l'image
contour_edge = cv2.adaptiveThreshold(vertical, 255,
cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 3, -2)
showImage("CONTOUR EDGE", contour_edge)
#Extension d'image de bord
kernel = np.ones((2, 2), np.uint8)
contour_edge = cv2.dilate(contour_edge, kernel)
showImage("DILATE contour_edge", contour_edge)
#Flou d'image(Lissage)
#Filtre de boîte normalisé pour prendre la moyenne
smooth = cv2.blur(np.copy(vertical), (2, 2))
#Fusionner l'image de la ligne verticale et le bord
#Extraction de coordonnées pour la pièce où se trouve l'arête
#Écraser l'image verticale à partir du bord des coordonnées extraites
(height, width) = np.where(contour_edge != 0)
vertical[height, width] = smooth[height, width]
#Affichage de l'image de résultat
showImage("RESULT IMAGE", vertical)
if __name__ == "__main__":
main('image/Warship_march_score.png')
Je cours sur un noyau 5x1 (élément structurel). L'arrière du processus est le processus de restauration pour obtenir l'apparence de l'image. Comme ce n'est pas l'essence en particulier, l'explication est omise.
Est-ce un tel endroit? À propos de l'endroit qui dit "Je peux le faire" en changeant le noyau (élément structurel) Ce n'est pas un gros problème en termes de contenu, mais il y a des choses qui peuvent être faites avec Il y avait quelque chose que j'ai ressenti et je l'ai noté.
Conversion de morphologie - documentation OpenCV-Python Tutorials 1 opencv.org - Extract horizontal and vertical lines by using morphological operations Marine Self-Defense Force Tokyo Music Corps JMSDF BAND, TOKYO - Mars "Gunkan"
Recommended Posts