2017-05-28 2 views
0

Quelle est la meilleure façon de faire des recherches sur plusieurs types d'images. Ce sont des images complexes qui sont vraiment différentes. J'utilise MatchTemplate pour chaque image que je recherche dans une vidéo. J'ai besoin de savoir quel type d'image je recherche à chaque fois.OpenCvSharp détecter plusieurs parties dans l'image

Est-ce la bonne façon de le faire? Faire un traitement pour chaque partie de l'image que je cherche?

Mat finderone = ...........; 
Mat findertwo = ...........; 
Mat finder... = ...........; 


var res1 = matSource.MatchTemplate(finderone,TemplateMatchModes.CCoeffNormed) 
var res2 = matSource.MatchTemplatefindertwo,TemplateMatchModes.CCoeffNormed) 
var res3 = matSource.MatchTemplate(.... , TemplateMatchModes.CCoeffNormed) 

Répondre

0

Votre approche peut être adéquate, mais elle a plusieurs limites. Vos modèles ne doivent pas être tournés, mis à l'échelle ou occlus.

Il existe plusieurs autres méthodes de détection d'image. Par exemple, en fonction des points caractéristiques, tels que SURF, SIFT et ainsi de suite. OpenCV a un bon tutoriel pour trouver l'objet connu à l'image: feature homography

Il peut être facilement réalisé avec opencvsharp aussi.

Si MatchTemplate répond à vos exigences, et que vous voulez simplement optimiser votre code, cela est impossible, car MatchTemplate ne peut pas fonctionner avec plusieurs modèles à la fois. La meilleure chose que vous pouvez faire, c'est d'améliorer la lisibilité de votre code et de structurer vos gabarits en une seule matrice de mats et de le vérifier dans la boucle:

Mat[] templates = new Mat[] { finderone, finder..., finder_N }; 
Mat[] results = new Mat[templates.Lenght]; 
for (int i = 0; i < templates.Length; ++i) { 
    results[i] = sourceMat.MatchTemplate(templates[i], TemplateMatchModes.CCoeffNormed); 
}