J'essaie de détecter correctement les bords d'une carte à jouer qui a été floutée, nivelée puis seuillée. Je pensais qu'avoir le contraste net noir et blanc rendrait les bords assez faciles à détecter, mais pas de joie jusqu'ici. Je commence avec:Détection de bords avec image seuillée
Et en utilisant le détecteur Canny j'ai écrit la production de ce:
Le résultat de Sobel était fondamentalement la même. Cependant, l'utilisation de la détection Canny OpenCV je pouvais produire ceci:
La frontière étant correctement mis en place ensemble est ce que je suis désespérément besoin de recréer dans mon propre code, et je ne suis pas engagé à utiliser un type particulier de détection de bord, j'ai juste besoin de trouver un algorithme qui me donnera l'avantage connecté! My Canny code peut être trouvé here, et il est très basé sur le code LIRE here. Si quelqu'un pouvait m'aider à passer de la première image à la troisième, je serais incroyablement reconnaissant! Toute détection de bord est la bienvenue!
Edit: Code pour NMS:
//main program
for(int x = 1; x < width-1; x++)
{
for(int y = 1; y < height-1; y++)
{
if(src.getRaster().getPixel(x, y, tmp)[0] >= 250)
{
trackWeakOnes(x, y, src);
}
}
}
private static void trackWeakOnes(int x, int y, BufferedImage src)
{
for (int a = x - 1; a <= x + 1; a++)
{
for (int b = y - 1; b <= y + 1; b++)
{
if (checkWeak(a, b, src))
{
src.getRaster().setPixel(x, y, tmpMax);
trackWeakOnes(a, b, src);
}
}
}
}
private static boolean checkWeak(int x, int y, BufferedImage src)
{
return ((src.getRaster().getPixel(x, y, tmpPix)[0] > 0) &&
(src.getRaster().getPixel(x, y, tmpPix)[0] < 255));
}
tmpPix est un tableau vide à remplir, tmpMax est un tableau {255, 255, 255} pour faire des bords blancs.
Je ne comprends pas le sens de votre question. Pourriez-vous clarifier ce que vous cherchez exactement? – Saeed
Ecrivez ma propre détection de contours qui peut détecter les bords de la première image afin qu'elle ressemble à la troisième image, par rapport aux bords cassés du second. Celui que j'ai écrit ne détecte pas correctement la bordure de la carte. Je ne suis pas engagé à utiliser seulement Canny, je vais essayer d'autres algorithmes de détection de bord si elles fonctionnent! –
Pourquoi n'utilisez-vous pas simplement OpenCV Canny si cela fonctionne? –