opencv advanced 02 - dessinez une variété de figures géométriques sur l'image

OpenCV fournit des fonctions de dessin pratiques, qui peuvent être utilisées pour dessiner des lignes droites, des rectangles, des cercles, des ellipses et d'autres figures géométriques, et peuvent également ajouter des descriptions de texte à des positions spécifiées dans l'image.

OpenCV fournit la fonction cv2.line() pour dessiner des lignes droites, cv2.rectangle() pour dessiner des rectangles, cv2.circle() pour dessiner des cercles, cv2.ellipse() pour dessiner des ellipses et cv2.polylines pour dessiner des polygones () , la fonction cv2.putText() qui ajoute du texte à l'image et d'autres fonctions de dessin.

Ces fonctions de dessin ont des paramètres communs, qui sont principalement utilisés pour définir l'image source, la couleur, les attributs de ligne, etc. Une brève introduction à ces paramètres communs est donnée ci-dessous.

  • img : L'image de support sur laquelle les graphiques sont dessinés (support de conteneur pour le dessin, également connu sous le nom de canevas, artboard).
  • color : La couleur pour dessiner la forme. Les couleurs sont généralement représentées à l'aide du modèle BGR, par exemple (0, 255, 0) pour le vert. Pour les images en niveaux de gris, seules les valeurs en niveaux de gris peuvent être transmises. Notez que l'ordre des canaux de couleur est BGR, pas RVB.
  • épaisseur : L'épaisseur de la ligne. La valeur par défaut est 1, si elle est définie sur -1, cela signifie remplir les graphiques (c'est-à-dire que les graphiques dessinés sont solides).
  • lineType : le type de ligne, la valeur par défaut est de 8 types de connexion. La valeur et la description du paramètre lineType sont indiquées dans le Tableau 19-1.

insérez la description de l'image ici

  • shift : précision des données. Ce paramètre est utilisé pour contrôler la précision de la valeur (telle que les coordonnées du centre du cercle, etc.) et n'a généralement pas besoin d'être défini.

tracer une ligne droite

OpenCV fournit la fonction cv2.line() pour tracer des lignes droites (segments de ligne). La syntaxe de cette fonction est :

img = cv2.line( img, pt1, pt2, couleur[, épaisseur[, lineType ]])

Dans la formule :

  • Les significations des paramètres img, couleur, épaisseur et lineType sont comme indiqué dans la description précédente.
  • pt1 représente le premier point (point de départ) du segment de ligne.
  • pt2 représente le deuxième point (point final) du segment de ligne.

Exemple : Utilisez la fonction cv2.line() pour dessiner trois segments de ligne dans une image avec un fond noir.

import numpy as np
import cv2
n = 300  # 图像尺寸

# 创建一个空白的彩色图像,尺寸为(n+1) x (n+1)3通道(RGB)
img = np.zeros((n+1, n+1, 3), np.uint8)

# 在图像上绘制蓝色直线,起点为(0,0),终点为(n,n),线宽为3
img = cv2.line(img, (0, 0), (n, n), (255, 0, 0), 3)

# 在图像上绘制绿色直线,起点为(0,100),终点为(n,100),线宽为1
img = cv2.line(img, (0, 100), (n, 100), (0, 255, 0), 1)

# 在图像上绘制红色直线,起点为(100,0),终点为(100,n),线宽为6
img = cv2.line(img, (100, 0), (100, n), (0, 0, 255), 6)

winname = 'line-demo'  # 窗口名称

# 创建一个窗口并设置窗口名字
cv2.namedWindow(winname)

# 在窗口中显示图像
cv2.imshow(winname, img)

# 等待键盘按键,0表示无限等待
cv2.waitKey(0)
cv2.destroyAllWindows()

résultat de l'opération :

insérez la description de l'image ici

dessiner un rectangle

OpenCV fournit 函数 cv2.rectangle()des méthodes pour dessiner des rectangles. La syntaxe de cette fonction est :

img = cv2.rectangle( img, pt1, pt2, couleur[, épaisseur[, lineType]] )

Dans la formule :

  • Les significations des paramètres img, couleur, épaisseur et lineType sont comme indiqué dans la description précédente.
  • pt1 est le sommet du rectangle.
  • pt2 est le sommet opposé à pt1 dans le rectangle.

Utilisez la fonction cv2.rectangle() pour dessiner un rectangle plein et un rectangle creux à l'intérieur d'une image de fond blanc.

code afficher comme ci-dessous:

import numpy as np
import cv2

n = 300  # 图像尺寸

# 创建一个白色背景的彩色图像,尺寸为n x n,3通道(RGB)
img = np.ones((n, n, 3), np.uint8) * 255

# 在图像上绘制填充的红色矩形,左上角坐标为(50, 50),右下角坐标为(n-100, n-50),颜色为红色,厚度为-1表示填充, 0表示不填充
img = cv2.rectangle(img, (50, 50), (n-100, n-50), (0, 0, 255), -1)

winname = 'rect-shixin'  # 窗口名称

# 创建一个窗口并设置窗口名字
cv2.namedWindow(winname)

# 在窗口中显示图像
cv2.imshow(winname, img)

# 等待键盘按键,0表示无限等待
cv2.waitKey(0)

# 关闭所有打开的窗口
cv2.destroyAllWindows()

insérez la description de l'image ici
Volontéimg = cv2.rectangle(img, (50, 50), (n-100, n-50), (0, 0, 255), -1)

Si -1 est remplacé par 0, un cadre rectangulaire non plein peut être dessiné et l'effet est le suivant.

insérez la description de l'image ici

dessiner un cercle

OpenCV fournit un 函数 cv2.circle()outil pour dessiner des cercles. La syntaxe de cette fonction est :

img = cv2.circle( img, center, radius, color[, thickness[, lineType]] )

Dans la formule :

  • Les significations des paramètres img, couleur, épaisseur et lineType sont comme indiqué dans la description précédente.

  • centre est le centre du cercle.

  • rayon est le rayon

Utilisez la fonction cv2.circle() pour dessiner un ensemble de cercles concentriques dans une image de fond blanc.

code afficher comme ci-dessous:

import numpy as np
import cv2
d = 400
img = np.ones((d,d,3),dtype="uint8")*255
(centerX,centerY) = (round(img.shape[1] / 2),round(img.shape[0] / 2))
# 将图像的中心作为圆心,实际值为 d/2
red = (0,0,255) # 设置白色变量
for r in range(5,round(d/2),12):
 cv2.circle(img,(centerX,centerY),r,red,3)
 # circle(载体图像,圆心,半径,颜色)
cv2.imshow("Demo19.3",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

résultat courant :

insérez la description de l'image ici

dessiner une ellipse

OpenCV fournit la fonction cv2.ellipse() pour dessiner des ellipses. Le format de syntaxe de cette fonction est :
img=cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[,
thick[, lineType]])
où :

  • Les significations des paramètres img, couleur, épaisseur et lineType sont comme indiqué dans la description précédente.
  • center est les coordonnées du centre de l'ellipse.
  • axes est la longueur des axes.
  • angle est l'angle de déviation.
  • startAngle est l'angle de l'angle de départ de l'arc.
  • endAngle est l'angle de l'angle final de l'arc.

Utilisez la fonction cv2.ellipse() pour dessiner au hasard un ensemble d'ellipses creuses dans une image de fond blanc.

import numpy as np
import cv2
d = 400
img = np.ones((d,d,3),dtype="uint8")*255
# 生成白色背景
center=(round(d/2),round(d/2))
# 注意数值类型,不可以使用语句 center=(d/2,d/2)
size=(100,200)
# 轴的长度
for i in range(0,10):
 angle = np.random.randint(0,361)
 # 偏移角度
 color = np.random.randint(0,high = 256,size = (3,)).tolist()
 # 生成随机颜色,3[0,256)的随机数
 thickness = np.random.randint(1,9)
 cv2.ellipse(img, center, size, angle, 0, 360, color,thickness)
cv2.imshow("demo-tuoyuan",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

résultat courant :
insérez la description de l'image ici

dessiner un polygone

OpenCV fournit la fonction cv2.polylines() pour dessiner des polygones. La syntaxe de cette fonction est :

img = cv2.polylines( img, pts, isClosed, couleur[, épaisseur[,
lineType[, shift]]])

Dans la formule :

  • Les significations des paramètres img, color, thick, lineType et shift sont comme indiqué dans la description précédente.
  • pts sont les sommets du polygone.
  • isClosed est un drapeau fermé, utilisé pour indiquer si le polygone est fermé. Si la valeur est True, connectez le dernier point au premier point pour fermer le polygone ; sinon, connectez simplement les points tour à tour pour former une courbe.

Lorsque vous utilisez la fonction cv2.polylines() pour dessiner un polygone, vous devez donner les coordonnées de chaque sommet. Les coordonnées de ces points forment un tableau dont la taille est égale à "le nombre de sommets 1 2", et le type de données de ce tableau doit être numpy.int32.

Utilisez la fonction cv2.polylines() pour dessiner un polygone à l'intérieur d'une image de fond blanc.

import numpy as np
import cv2
d = 400  # 图像尺寸

# 创建一个白色背景的彩色图像,尺寸为d x d,3通道(RGB)
img = np.ones((d, d, 3), dtype="uint8") * 255

# 生成多边形的各个顶点坐标
pts = np.array([[200, 50], [300, 200], [200, 350], [100, 200]], np.int32)

# 重新整形顶点数组,将其变为顶点数 x 1 x 2 的形状
pts = pts.reshape((-1, 1, 2))

# 使用 cv2.polylines() 函数绘制多边形
# 第一个参数为图像,第二个参数为顶点数组,第三个参数为True表示封闭多边形,颜色为绿色,线宽为8
cv2.polylines(img, [pts], True, (0, 255, 0), 8)
cv2.imshow("duobianxing",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

insérez la description de l'image ici

Le troisième paramètre isClosed dans la fonction cv2.polylines() est un indicateur de fermeture. Lorsque cette valeur est définie sur False, chaque
sommet est uniquement connecté à un segment de ligne et le polygone n'est pas fermé. Le code à ce stade est :

cv2.polylines(img,[pts],False,(0,255,0),8)

L'effet est le suivant :

insérez la description de l'image ici

dessiner du texte sur des graphiques

OpenCV fournit la fonction cv2.putText() pour dessiner du texte sur des graphiques. La syntaxe de cette fonction est :

img=cv2.putText(img, texte, org, fontFace, fontScale, couleur[,
épaisseur[, lineType[, bottomLeftOrigin]]])

Dans la formule :

  • Les significations des paramètres img, color, thick, lineType et shift sont comme indiqué dans la description précédente.
  • text est la police à dessiner.
  • org est l'emplacement où dessiner la police, en commençant par le coin inférieur gauche du texte.
  • fontFace indique le type de police, et ses types de paramètres et leurs significations sont indiqués dans le Tableau 19-2.
  • fontScale représente la taille de la police.
  • bottomLeftOrigin est utilisé pour contrôler l'orientation du texte. La valeur par défaut est False, lorsqu'elle est définie sur True, le texte est mis en miroir verticalement.

insérez la description de l'image ici

Utilisez la fonction cv2.putText() pour dessiner du texte dans une image de fond blanc.

code afficher comme ci-dessous:

import numpy as np
import cv2

d = 400  # 图像尺寸

# 创建一个白色背景的彩色图像,尺寸为d x d,3通道(RGB)
img = np.ones((d, d, 3), dtype="uint8") * 255

# 定义字体
font = cv2.FONT_HERSHEY_SIMPLEX


# 在图像上绘制红色的 "OpenCV" 文本,位置同样为(0, 200),字体大小为3,线宽为5
cv2.putText(img, 'OpenCV', (0, 200), font, 3, (0, 0, 255), 5)

# 创建一个窗口并显示图像
cv2.imshow("weizi", img)

cv2.waitKey(0)
cv2.destroyAllWindows()


Ce programme utilise la fonction cv2.putText() pour dessiner le texte "OpenCV" dans l'image img .

insérez la description de l'image ici

Je suppose que tu aimes

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