Détection de caractéristiques à l'aide d'opencv (détection de coin)

introduction

À propos de la détection des caractéristiques de l'image à l'aide d'opencv. Cette fois, nous détecterons les coins (courbes, etc.). Deux modèles sont détectés. Voir la page suivante pour les bases Bases du traitement d'images binarisées par Python ⇒ https://qiita.com/jin237/items/04ca3d0b56e10065c4e4

essayons

Bien qu'opencv soit utilisé, il existe deux méthodes pour la détection des coins.

Détection de coin par "cv2.cornerHarris"

On suppose que le bord a un changement de luminosité élevé dans toutes les directions.

#Détection de coin à partir de l'image d'échantillon
import matplotlib.pyplot as plt
%matplotlib inline
import cv2


#Chargement d'image et binarisation
img = cv2.imread("sample.png ",0)
#Détection de coin
corners = cv2.cornerHarris(img, 3,1,0.04)
plt.imshow(corners, cmap='gray')
plt.savefig('gray_pltsample')

gray_pltsample.png

img = cv2.imread("sample.png ", 0)

Par, "0" permet la lecture en tant qu'image binarisée en même temps que la lecture de l'image. À l'origine, il pourrait être écrit comme "cv2.cvtColor (img, cv2.COLOR_RGB2GRAY)", mais cette fois j'ai utilisé cette méthode pour rendre le processus plus facile à voir. Il est affiché et enregistré par matplotlib. Aussi,

corners = cv2.cornerHarris(img, 3,1,0.04)

sur, 3 = Plage de pixels proche (taille de bloc) 1 = taille du noyau (ksize) 0,04 = paramètre libre du détecteur Harris (k)

blockSize - La taille de la zone adjacente à prendre en compte lors de la détection des coins. ksize - Taille du noyau de l'opérateur de gradient de Sobel. k - Paramètres libres dans l'équation.

Pour la théorie, voir Harris Corner Detection.

Détection de coin par "cv2.goodFeaturesToTrack"

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('sample.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

corners = cv2.goodFeaturesToTrack(gray,100000000,0.01,10)
corners = np.int0(corners)

for i in corners:
    x,y = i.ravel()
    cv2.circle(img,(x,y),3,255,-1)

plt.imshow(img),plt.show()

gFTT_lenna.png

Vous pouvez créer des points pour les points caractéristiques. Je l'ai beaucoup réglé cette fois, mais il n'y a pas beaucoup de changement dans le résultat. Si vous concevez ce point rouge, il peut être un peu plus facile à comprendre.

à la fin

Un coin a été détecté. C'est facile à faire, c'est donc une bonne idée de le comprendre, y compris la théorie. Il y en a d'autres que ceux présentés ci-dessus, donc je les écrirai dans d'autres articles.

Recommended Posts

Détection de caractéristiques à l'aide d'opencv (détection de coin)
[Python] Utilisation d'OpenCV avec Python (détection des bords)
Détection des fonctionnalités OpenCV avec Google Colaboratory
J'ai essayé la détection d'objets en utilisant Python et OpenCV
Détection d'expression à l'aide de Yolov5
Essayez la détection des bords avec OpenCV
[Python] Utilisation d'OpenCV avec Python (basique)
Essayez d'utiliser OpenCV sur Windows
Détection des bords en temps réel avec OpenCV
Essayez d'utiliser la fonction de modèle de Django
Détection de visage avec Python + OpenCV
Essayez d'utiliser la fonction de brouillon de Pelican
Correction gamma sans utiliser OpenCV
Utiliser OpenCV avec Python @Mac
Détection de visage d'anime avec OpenCV
[Traitement d'image] Poo-san est nu par détection de bord en utilisant Python et OpenCV!
Examinons un peu plus la correspondance des points caractéristiques à l'aide d'OpenCV
Tour verticale de Pise utilisant OpenCV ~
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Détection de logo à l'aide de l'API de détection d'objets TensorFlow
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
Rendre la rotation de détection d'objets OpenCV invariante
J'ai essayé d'utiliser GrabCut d'OpenCV
Essayez d'utiliser la fonction de débogage à distance de PyCharm
Détection des valeurs aberrantes à l'aide d'un SVM de classe
Traitement de lignes horizontales à l'aide de la transformation de morphologie OpenCV
Détection de chat avec OpenCV (distribution de modèles)
Détection de visage à l'aide d'un classificateur en cascade