依然放一张2018绘师100人展的作品,来自绘师Rellakinoko
在上一话的结尾,我们提到了要使用神奇的工具(康娜酱默默地拿出了 鼠标 滑动条 还有画笔)
嗯,以小林的性格,绝对不会告诉你这一话要讲简单绘图、鼠标事件和滑动条的(づ ̄ 3 ̄)づ
用OpenCV画画
画画什么的 康娜酱最喜欢了
任务:教会康娜酱画点、直线、矩形、圆形和写字。
用到的函数:zeros,line,rectangle,circle和putText。
函数原型:
img:画布
pt1,pt2:直线段起始点和终止点
color:线条颜色,BGR空间
thickness:线宽
linetype:线型,有cv.FILLED,cv.LINE_4, cv.LINE_8,cv.LINE_AA。
img:画布
pt1,pt2:矩形的左上角和右下角
剩余参数同上
center:圆心
radius:半径
其他参数同上。
哇,这个函数有好多的参数,其实呢,一般我们只关心一下几个参数
img:画布
text:要显示的文字,字符串形式
org:文本框左下角的坐标
fontFace:字体,具体有哪些字体同学们可查阅API
fontScale:缩放倍数
下面,康娜酱 要 画画了!
鼠标 是什么?
学过Java的同学知道,Java中有个叫侦听器的东西,用来侦测事件。在OpenCV的鼠标操作中也是靠鼠标事件和回调函数完成的,鼠标的移动、点击左键或右键都会产生一个特定的事件,然后由回调函数完成我们想要实现的功能。
回调函数就像一个侦听器,随时侦测鼠标的动作。
那么有哪些鼠标事件呢?我们可以在Python Console中输入以下命令查看(注意环境哦):
任务:移动鼠标并按下Ctrl键 画 圆?
我们来写一个回调函数,功能是 双击鼠标左键画一个圆,就叫draw_circle吧:
然后“激活”回调函数:
这里用到了setMouseCallback来“激活”回调函数,函数原型:
windowname:窗口名,即我们要在哪个窗口使用鼠标回调函数
onMouse:回调函数的函数名(不是字符串啊喂)
param:通常可选参数小林是不会讲的,但是这里提一下,这个参数可以被传送到回调函数中哦,如果没有需要传递的参数,这里可以不写,但在回调函数中一定要写上
现在再来讲下回调函数的flags和param参数:
flags:对应一系列事件,这些事件为,当event发生时是否按下了Ctrl、Shift或Alt键,对应的事件名可用上面命令行中的命令显示
param:需要回传的参数,亦可以元组和列表的形式传入
好的,奉上完整代码:
滑动条什么的
来,跟小林一起念:Trackbar。(づ ̄ 3 ̄)づ
滑动条的实现类似上文鼠标事件,也需要回调函数,相应的创建并“激活”函数为createTrackbar。
函数原型:
trackbarName:滑动条名字,运行时会显示出来的
windowName:窗口名字
value:滑动条初始值
count:滑动条的调节范围,0~count
onChange:回调函数名
若需要获取滑动条当前值,则需要用函数getTrackbarPos(),函数原型:
任务:下面小林写一段RGB调色盘的代码,帮助同学们理解RGB色彩空间。敲黑板了,OpenCV中是BGR而不是RGB!
这一话的示例代码已经同步到了Github
搜索Kobayashi_OpenCV_py
在Class2 GUI Core Features里
关注这个神奇的公众号
与小林一起出发
如需转载请后台小窗小林哦
领取专属 10元无门槛券
私享最新 技术干货