Le bord fait référence à la limite entre les objets et l'arrière-plan, et la détection de bord fait généralement référence au traitement d'image qui détecte les bords en détectant les changements dans les valeurs de pixel et les zones avec un gradient de luminosité important dans l'image.
(L'image provient du [Site d'images gratuites](https://www.pakutaso.com/20191228360post-24995.html))Fonction de détection de bord implémentée et fournie par opencv. Les images de bord peuvent être créées facilement, mais deux paramètres (principalement) doivent être ajustés pour une utilisation correcte.
Page officielle: Document、チュートリアル
J'ai essayé d'utiliser cv2.Canny ()
tout en ajustant le seuil d'une manière ou d'une autre, mais cela n'a pas fonctionné comme prévu. Je ne sais pas si l'image est limitée ou mal ajustée. Comprenons bien la signification des paramètres.
cv2.Canny(gray_img, threshold1, threshold2)
Simplement, «seuil1» et «seuil2» représentent le seuil pour déterminer si un bord est présent. ** Plus la valeur est élevée, plus il est difficile de détecter le bord, et plus la valeur est petite, plus il est facile de détecter le bord. ** ** (Si le seuil est grand, il sera jugé comme un bord uniquement lorsque la luminosité augmente.)
import cv2
gray_img = cv2.imread('sample.jpg', cv2.IMREAD_GRAYSCALE)
threshold1 = 0
threshold2 = 360
edge_img = cv2.Canny(gray_img, threshold1, threshold2)
cv2.imwrite('sample_edge.jpg', edge_img)
threshold2: maxVal seuil2 est la valeur la plus intuitive **, le seuil lui-même pour déterminer s'il s'agit d'un front **.
Si vous réduisez progressivement le seuil2, ce sera comme suit. (Pour faciliter la compréhension, le seuil1 a la même valeur que le seuil2.)
threshold1: minVal Comme prémisse de l'explication de l'argument, la méthode de Canny considère l'arête comme une longue ligne, et ** la partie adjacente à l'arête a tendance à être une arête **. (Reportez-vous à la figure ci-dessous)
À partir de cette idée, nous avons introduit un deuxième seuil (seuil1), et en termes simples, le rôle est "** Un seuil lâche pour juger s'il s'agit ou non d'une arête dans la partie adjacente à une autre arête (la partie qui tend à devenir une arête) * * ".
En d'autres termes, même si vous essayez de rendre le seuil 1 plus lâche (plus petit), les bords ne seront pas détectés aux endroits où rien n'a été détecté à l'origine.
En le desserrant, la partie adjacente du bord détecté à l'origine par seuil2 a tendance à devenir un bord, c'est-à-dire intuitivement, on a l'impression de prolonger la ligne du bord détecté à l'origine par seuil2 **. ..
Si vous réduisez progressivement le seuil 1, ce sera comme suit.
cv2.Canny(gray_img, threshold1, threshold2)
--seuil 1: seuil lâche pour juger s'il s'agit ou non d'une arête dans une partie adjacente à une autre arête (une partie qui a tendance à être une arête) --threshold2: Seuil lui-même pour juger s'il s'agit d'un front
De ce qui précède, l'ordre comme expliqué ci-dessus est recommandé.
1.Donnez à threhsold1 la même valeur que threshold2. 2. Ajustez le seuil2 pour que le bord apparaisse là où vous voulez qu'il soit détecté. 3. Utilisez seuil1 pour agrandir les bords.
Recommended Posts