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
É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
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()
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()
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!