Heim > Artikel > Backend-Entwicklung > Detaillierte Erklärung der einfachen Zeichenbrettfunktion basierend auf opencv
OpenCV bietet viele einfache Anweisungen zur Implementierung komplexer Funktionen. Basierend auf den grundlegenden Anweisungen zur Farb- und Mausinteraktion können wir ein einfaches Zeichenbrett erstellen. Obwohl es einfach ist, sind zur Herstellung des Rahmens nicht weniger Schritte erforderlich.
Wenn Sie interessiert sind, können Sie es gemäß meinen Schritten schreiben oder den Code direkt in das Hauptprogramm kopieren und ausführen.
Verwandte Lernempfehlungen: Python-Video-Tutorial
1. Funktion
Entfernen Sie die Zeichenbrettfunktion, um das spätere Schreiben von Programmen zu erleichtern.
Zielfunktionen: Anpassbare Farben, Zeichenbereich und Mauseingabe.
2. Framework-Konstruktion
Es gibt zwei Hauptschritte:
Schritt 1: Erstellen Sie eine Farbauswahl, die mit der Schieberegleranweisung cv.createTrackbar von OpenCV festgelegt werden kann. cv.createTrackbar verfügt über insgesamt fünf Parametereinstellungen: (Trackbar-Name, Zielfenstername, Startwert – auch Standardwert, Maximalwert, Rückruffunktion).
#创建画布 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
Schritt 2: Erfassen Sie den Mausaktionsstatus und zeichnen Sie basierend auf der Mausaktion Grafiken im Zeichenbereich. Gängige Mausbedienungsanweisungen können in Python mit der Anweisung *events = [i for i in dir(cv) if ‚EVENT‘ in i]* angezeigt werden.
#设置一个是否开始画画的开关 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. Hauptfunktion
Die Hauptfunktion besteht darin, die beiden oben genannten Teile zu integrieren. 4. Laufeffekt Erkundete die Details und fand heraus, was Aufmerksamkeit erfordert.
6. Allgemeine Vorgehensweise
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()
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der einfachen Zeichenbrettfunktion basierend auf opencv. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!