fondation opencv 48 - dessinez le contour de l'image et coupez l'exemple - cv2.drawContours()

Dessiner les contours d'une image : fonction drawContours

Dans OpenCV, les contours de l'image peuvent être dessinés à l'aide de la fonction cv2.drawContours(). La syntaxe de cette fonction est :

image=cv2.drawContours( image, contours, contourIdx, color[,
épaisseur[, lineType[, hierarchie[, maxLevel[, offset]]]]] )

Parmi eux, la valeur de retour de la fonction est image, qui représente l'image cible, c'est-à-dire l'image d'origine avec le bord dessiné.
Cette fonction a les paramètres suivants :

  1. image : L'image pour dessiner le contour. A noter que la fonction cv2.drawContours() va dessiner le contour directement sur l'image image. C'est-à-dire qu'après l'exécution de la fonction, l'image n'est plus l'image d'origine, mais l'image contenant le contour. Par conséquent, si l'image image a d'autres utilisations, vous devez en faire une copie à l'avance et transmettre l'image de copie à la fonction cv2.drawContours() pour utilisation.

  2. contours : les contours à tracer. Le type de ce paramètre est le même que les contours de sortie de la fonction cv2.findContours(), qui sont tous deux de type liste.

  3. contourIdx : L'index du bord à dessiner, indiquant à la fonction cv2.drawContours() s'il faut dessiner un certain contour ou tous les contours. Si le paramètre est un entier ou zéro, cela signifie dessiner le contour de l'indice correspondant ; si la valeur
    est négative (généralement "-1"), cela signifie dessiner tous les contours.

  4. color : la couleur à dessiner, exprimée au format BGR.

  5. épaisseur : un paramètre facultatif, indiquant l'épaisseur du pinceau utilisé lors du dessin du contour. Si la valeur est définie sur "-1", cela signifie
    dessiner un contour solide.

  6. lineType : paramètre facultatif, indiquant le type de ligne utilisé lors du dessin du contour.

  7. hiérarchie : correspond aux informations hiérarchiques sorties par la fonction cv2.findContours().

  8. maxLevel : contrôle la profondeur de la hiérarchie des contours dessinés. Si la valeur est 0, cela signifie que seul le contour du 0ème calque est dessiné ; si la valeur est d'autres nombres positifs non nuls, cela signifie que le contour du niveau le plus élevé et le même nombre de niveaux inférieurs sont dessinés.

  9. décalage : paramètre de décalage. Ce paramètre décale le contour à une position différente pour l'affichage.

L'image du paramètre et l'image de la valeur de retour de la fonction cv2.drawContours() ont la même valeur après l'opération de la fonction. Par conséquent, la fonction cv2.drawContours() peut également être écrite sous la forme d'une valeur sans retour :

cv2.drawContours( image, contours, contourIdx, color[, épaisseur[,
lineType[, hierarchie[, maxLevel[, offset]]]]] )

Exemple de code : dessine tous les contours d'une image.

Si vous souhaitez dessiner tous les contours de l'image, vous devez définir la valeur du paramètre contourIdx de la fonction cv2.drawContours() sur "-1". Le code téléchargeable dans la section précédente de
l'image expérimentale originale est le suivant :

import cv2
o = cv2.imread('contours.bmp')
cv2.imshow("original",o)
#将原图像转换为灰度图像
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
#将灰度图像转换为二值图像
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
#寻找轮廓,返回的contours是轮廓的列表,hierarchy是每个轮廓对应的属性
contours, hierarchy = cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#绘制轮廓,contours是轮廓的列表,-1表示绘制所有轮廓,(0,0,255)表示轮廓颜色为红色,5表示轮廓宽度为5
o=cv2.drawContours(o,contours,-1,(0,0,255),5)
cv2.imshow("result",o)
cv2.waitKey()
cv2.destroyAllWindows()

L'effet courant est le suivant :

insérez la description de l'image ici
Dans ce programme, la couleur du contour est réglée sur rouge (en raison de l'impression en noir et blanc, il est affiché en gris dans le livre papier), c'est-à-dire (0, 0, 255), et le paramètre épaisseur (épaisseur
de la ligne de contour) est réglé sur " 5".

Exemple 2 Coupez les informations sur les contours d'une image une par une.

import cv2
import numpy as np
o = cv2.imread('contours.bmp')
#显示原始图像
cv2.imshow("original",o)
#将原图像转换为灰度图像
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
#将灰度图像转换为二值图像
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
#寻找轮廓,返回的contours是轮廓的列表,hierarchy是每个轮廓对应的属性
contours, hierarchy = cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#获取轮廓的数量
n=len(contours)
#对每个轮廓进行绘制
contoursImg=[]
for i in range(n):
    #创建空白画布
 temp=np.zeros(o.shape,np.uint8)
 contoursImg.append(temp)
 #绘制轮廓,contours是轮廓的列表,i表示绘制第i个轮廓,(255,255,255)表示轮廓颜色为白色,5表示轮廓宽度为5
 contoursImg[i]=cv2.drawContours(contoursImg[i],contours,i,(255,255,255),5)
 cv2.imshow("contours[" + str(i)+"]",contoursImg[i])
cv2.waitKey()
cv2.destroyAllWindows()

insérez la description de l'image ici
insérez la description de l'image ici

Exemple 3 : Utilisation de la fonction de dessin de contour pour extraire des objets de premier plan.

Définissez la valeur du paramètre épaisseur de la fonction cv2.drawContours() sur "-1" pour dessiner le contour solide de l'objet de premier plan. L'objet de premier plan peut être extrait de l'image d'origine en effectuant une opération "ET au niveau du bit" sur le contour solide et l'image d'origine.

code afficher comme ci-dessous:

import cv2
import numpy as np
o = cv2.imread('loc3.jpg')
cv2.imshow("original",o)
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
#创建空白画布
mask=np.zeros(o.shape,np.uint8)
#绘制轮廓,contours是轮廓的列表,-1表示绘制所有轮廓,(255,255,255)表示轮廓颜色为白色,-1表示轮廓宽度为-1,表示对轮廓进行填充
mask=cv2.drawContours(mask,contours,-1,(255,255,255),-1)
#显示掩膜
cv2.imshow("mask" ,mask)
#将原图像和掩膜进行位运算
loc=cv2.bitwise_and(o,mask)
cv2.imshow("location" ,loc)
cv2.waitKey()
cv2.destroyAllWindows()

Dans cet exemple, le paramètre épaisseur de la fonction cv2.drawContours() est défini sur "-1", et le masque de contour solide de l'objet de premier plan est obtenu
. Ensuite, utilisez l'instruction "cv2.bitwise_and(o, mask)" pour effectuer une opération "ET au niveau du bit" sur l'image d'origine o et le masque de contour solide
pour obtenir l'objet de premier plan de l'image d'origine.

résultat de l'opération :

  • L'image de gauche est l'image originale avec une petite fleur comme objet de premier plan.
  • L'image du milieu est le contour plein du fleuron obtenu à partir de l'image originale.
  • L'image de droite est le fleuron d'objet de premier plan extrait.
    insérez la description de l'image ici
    insérez la description de l'image ici

L'image originale de l'expérience
insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/hai411741962/article/details/132169044
conseillé
Classement