OpenCV는 색상 및 마우스 상호 작용에 대한 기본 설명을 기반으로 복잡한 기능을 구현하는 간단한 명령문을 많이 제공합니다. 간단하지만 프레임을 만드는 단계는 적지 않습니다.
관심 있으신 분들은 제가 진행하는 단계에 따라 작성하셔도 되고, 메인 프로그램에서 직접 코드를 복사해서 실행하셔도 됩니다.
관련 학습 권장사항: python 비디오 튜토리얼
1. 기능
다음 프로그램 작성을 용이하게 하기 위해 드로잉 보드 기능을 지웁니다.
대상 기능: 조정 가능한 색상, 그리기 영역 및 마우스 입력.
2. 프레임워크 구성
두 가지 주요 단계가 있습니다:
1단계: OpenCV의 슬라이더 문 cv.createTrackbar를 사용하여 설정할 수 있는 색상 선택을 만듭니다. cv.createTrackbar에는 총 5개의 매개변수 설정이 있습니다(트랙바 이름, 대상 창 이름, 시작 값 - 기본값, 최대값, 콜백 함수).
#创建画布 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
2단계: 마우스 동작 상태를 캡처하고 마우스 동작에 따라 그리기 영역에 그래픽을 그립니다. 일반적인 마우스 조작 명령문은 *events = [i for i in dir(cv) if 'EVENT' in i]* 명령문을 사용하여 Python에서 볼 수 있습니다.
#设置一个是否开始画画的开关 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. 주요 기능
주요 기능은 위의 두 부분을 통합하는 것입니다.
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()
4. 실행 효과
5. 요약
이 간단한 스케치패드에서 주로 마우스 기능인 cv.setMouseCallback과 두 가지 기본 OpenCV 기능인 cv.createTrackbar를 살펴보았습니다. 세부 사항을 확인하고 주의가 필요한 사항을 알아냈습니다.
6. 일반 절차
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()
위 내용은 opencv 기반의 간단한 드로잉보드 기능에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!