介绍
本篇文章为大家展示了opencv如何实现简单画板的功能,代码简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
opencv提供了很多简单的语句,实现复杂的功能,根据颜色和鼠标交互的基础语句,我们可以建立一个简单的画板。尽管它简单,但是制作的框架步骤不能少。
如果您感兴趣,可以按照我的步骤写一下,或者直接复制总程序中的代码运行。
引用>
<强>一、功能强>
明确画板功能,便于后续编写程序。
目标功能:可调节颜色,有画图区域,可以进行鼠标输入。<强>二,框架搭建强>
主要有两步:
建立颜色选区,可以用opencv的滑动条语句cv.createTrackbar设置.cv。createTrackbar一共拥有五个参数设置,它们是(Trackbar名称,目标窗口名称,起始值,同时也是默认值,最大值,回调函数)。
#创建画布 img=np.zeros ((300512 3), np.uint8) #给画布命名——需要提供给Trackbar cv.namedWindow (“image") #创建RGB三种颜色的Trackbar,返回函数不需要做任何动作 cv.createTrackbar (“R",“image", 0255年,没有什么) cv.createTrackbar (“G",“image", 0255年,没有什么) cv.createTrackbar (“B",“image", 0255年,没有什么) #由于OpenCv里面无按钮函数,所以用0/1来表示开关 开关=?:从\ n1:知道; cv.createTrackbar(开关,“image" 0, 1,没有什么) #回调函数,不需要做任何操作 def (x): 通过捕捉鼠标动作状态,根据鼠标动作,实现在画图区域画出图形。常见的鼠标操作语句,可以使用语句*事件=[我的dir (cv)的事件# 39;在我*在python内查看。
#设置一个是否开始画画的开关 画=False #定义画画函数 def画(事件,x, y,国旗,参数): #将画画开关作为全局变量,以便于在每次动作以后改变它的值 全球画 #使用函数cv.EVENT_LBUTTONDOWN,如果鼠标左键按下,画圆,同时画为真 如果事件==cv.EVENT_LBUTTONDOWN: cv.circle (img (x, y), 3 (g b r), 1) 画=True #如果鼠标移动,进行下面操作 elif事件==cv.EVENT_MOUSEMOVE: #如果画为真,开始画圆 如果图==True: 简历。圆(img (x, y), 3 (g b r), 1) #如果鼠标左键抬起,画最后一个圆,并将图纸设为False,此时就会停止画的画 elif事件==cv.EVENT_LBUTTONUP: cv.circle (img (x, y), 3 (g b r), 1) 画=False<强>三、主函数强>
主函数就是对上述两部分进行整合。
, (1): #展示画布 cv.imshow (“image" img) #设置终止按钮,为了保证在32/64位系统或者在不是ASCII编码的键盘上有正常的操作,使用,0 xff取低八位 k=cv.waitKey(1)和0 xff #如果k为27日即键盘上Esc的ASCII编码序号,退出画板 如果k==27日: 打破 #获取每个Trackbar中的值 r=cv.getTrackbarPos (“R",“image") g=cv.getTrackbarPos (“G",“image") b=cv.getTrackbarPos (“B",“image") s=简历。getTrackbarPos(开关,“image") #如果开关是0,清空画板并禁止画的画,如果是1,则允许 如果s==0: img [:]=0 其他: cv.setMouseCallback (“image"画) #最后不要忘记销毁窗口 cv.destroyAllWindows ()<强>四、运行效果强>
<强>五、总结强>
从这个简单的画板,我们主要学习运用了鼠标函数cv.setMouseCallback,还有简历。createTrackbar这两个基本的OpenCV函数,并探索了其中的细节,找到了其中需要注意的地方。
<强>六,总程序强>
进口cv2简历 进口numpy np def (x): 通过 img=np.zeros ((300512 3), np.uint8) cv.namedWindow (“image") cv.createTrackbar (“R",“image", 0255年,没有什么) cv.createTrackbar (“G",“image", 0255年,没有什么) cv.createTrackbar (“B",“image", 0255年,没有什么) 开关=?:从\ n1:知道; cv.createTrackbar(开关,“image" 0, 1,没有什么) 画=False def画(事件,x, y,国旗,参数): 全球画 如果事件==cv.EVENT_LBUTTONDOWN: cv.circle (img (x, y), 3 (g b r), 1) 画=True elif事件==cv.EVENT_MOUSEMOVE: 如果图==True: 简历。圆(img (x, y), 3 (g b r), 1) elif事件==cv.EVENT_LBUTTONUP: cv.circle (img (x, y), 3 (g b r), 1) 画=False 而(1): cv.imshow (“image" img) k=cv.waitKey(1)和0 xff 如果k==27日: 打破 r=cv.getTrackbarPos (“R",“image") g=cv.getTrackbarPos (“G",“image") b=cv.getTrackbarPos (“B",“image") s=简历。getTrackbarPos(开关,“image") 如果s==0: img [:]=0 其他: cv.setMouseCallback (“image"画) cv.destroyAllWindows ()opencv如何实现简单画板的功能