Maison > développement back-end > Tutoriel Python > Explication détaillée de la fonction simple de la planche à dessin basée sur opencv

Explication détaillée de la fonction simple de la planche à dessin basée sur opencv

coldplay.xixi
Libérer: 2020-08-07 15:51:45
avant
3483 Les gens l'ont consulté

Explication détaillée de la fonction simple de la planche à dessin basée sur opencv

OpenCV fournit de nombreuses instructions simples pour implémenter des fonctions complexes. Sur la base des instructions de base de la couleur et de l'interaction de la souris, nous pouvons construire une simple planche à dessin. Bien que ce soit simple, il n’y a pas moins d’étapes pour réaliser le cadre.

Si vous êtes intéressé, vous pouvez l'écrire selon mes étapes, ou copier directement le code dans le programme principal et l'exécuter.

Recommandations d'apprentissage associées : Tutoriel vidéo Python

Fonctions

Effacer la planche à dessin. fonction, il est pratique pour la programmation ultérieure.
Fonctions cibles : couleur réglable, zone de dessin et saisie de la souris.

2. Construction de la charpente

Il y a deux étapes principales :

La première étape : Établir La sélection des couleurs peut être définie à l'aide de l'instruction de curseur OpenCV cv.createTrackbar. cv.createTrackbar a un total de cinq paramètres, qui sont (nom de la barre de suivi, nom de la fenêtre cible, valeur de départ - également la valeur par défaut, la valeur maximale, la fonction de rappel).

#创建画布
img=np.zeros((300,512,3),np.uint8)
#给画布命名——需要提供给Trackbar
cv.namedWindow("image")
#创建RGB三种颜色的Trackbar,返回函数不需要做任何动作
cv.createTrackbar("R","image",0,255,nothing)
cv.createTrackbar("G","image",0,255,nothing)
cv.createTrackbar("B","image",0,255,nothing)
#由于OpenCv里面无按钮函数,所以用0/1来表示开关
switch="0:OFF\n1:ON"
cv.createTrackbar(switch,"image",0,1,nothing)
#回调函数,不需要做任何操作
def nothing(x):
 pass
Copier après la connexion

Étape 2 : Capturez l'état de l'action de la souris et dessinez des graphiques dans la zone de dessin en fonction de l'action de la souris. Les instructions courantes d'opération de souris peuvent être visualisées en python à l'aide de l'instruction *events = [i for i in dir(cv) if 'EVENT' in i]*.

#设置一个是否开始画画的开关
drawing=False
#定义画画函数
def draw(event,x,y,flag,param):
 #将画画开关作为全局变量,以便于在每次动作以后改变它的值
 global drawing
 #使用函数cv.EVENT_LBUTTONDOWN,如果鼠标左键按下,画圆,同时drawing为真
 if event==cv.EVENT_LBUTTONDOWN:
  cv.circle(img,(x,y),3,(g,b,r),-1)
  drawing=True
 #如果鼠标移动,进行下面操作
 elif event==cv.EVENT_MOUSEMOVE:
  #如果drawing为真,开始画圆
  if drawing==True:
   cv.circle(img, (x, y), 3, (g, b, r), -1)
 #如果鼠标左键抬起,画最后一个圆,并将drawing设为False,此时就会停止画画
 elif event==cv.EVENT_LBUTTONUP:
  cv.circle(img,(x,y),3,(g,b,r),-1)
  drawing=False
Copier après la connexion

3. Fonction principale

La fonction principale est d'intégrer les deux parties ci-dessus.

while(1):
 #展示画布
 cv.imshow("image",img)
 #设置终止按钮,为了保证在32/64位系统或者在不是ASCII编码的键盘上有正常的操作,使用&0xFF取低八位
 k=cv.waitKey(1)&0xFF
 #如果k为27,即键盘上Esc的ASCII编码序号,退出画板
 if k==27:
  break
 #获取每个Trackbar中的值
 r=cv.getTrackbarPos("R","image")
 g = cv.getTrackbarPos("G", "image")
 b = cv.getTrackbarPos("B", "image")
 s = cv.getTrackbarPos(switch, "image")
 #如果开关是0,清空画板并禁止画画,如果是1,则允许
 if s==0:
  img[:]=0
 else:
  cv.setMouseCallback("image", draw)
#最后不要忘记销毁窗口
cv.destroyAllWindows()
Copier après la connexion

Quatre effets de course

Résumé

De ce simple. Dans la planche à dessin, nous avons principalement appris et utilisé la fonction de la souris cv.setMouseCallback et cv.createTrackbar, deux fonctions de base d'OpenCV, et avons exploré les détails et découvert ce qui nécessite une attention particulière.

6. Procédure générale

import cv2 as cv
import numpy as np

def nothing(x):
 pass
img=np.zeros((300,512,3),np.uint8)
cv.namedWindow("image")
cv.createTrackbar("R","image",0,255,nothing)
cv.createTrackbar("G","image",0,255,nothing)
cv.createTrackbar("B","image",0,255,nothing)
switch="0:OFF\n1:ON"
cv.createTrackbar(switch,"image",0,1,nothing)

drawing=False
def draw(event,x,y,flag,param):
 global drawing
 if event==cv.EVENT_LBUTTONDOWN:
  cv.circle(img,(x,y),3,(g,b,r),-1)
  drawing=True
 elif event==cv.EVENT_MOUSEMOVE:
  if drawing==True:
   cv.circle(img, (x, y), 3, (g, b, r), -1)
 elif event==cv.EVENT_LBUTTONUP:
  cv.circle(img,(x,y),3,(g,b,r),-1)
  drawing=False

while(1):
 cv.imshow("image",img)
 k=cv.waitKey(1)&0xFF
 if k==27:
  break
 r=cv.getTrackbarPos("R","image")
 g = cv.getTrackbarPos("G", "image")
 b = cv.getTrackbarPos("B", "image")
 s = cv.getTrackbarPos(switch, "image")
 if s==0:
  img[:]=0
 else:
  cv.setMouseCallback("image", draw)
cv.destroyAllWindows()
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal