opencv画框,
OpenCV提供了许多简单的语句来实现复杂的功能。根据颜色和鼠标交互的基本语句,我们可以构建一个简单的画板。虽然简单,但是做框架有很多步骤。
如果有兴趣,可以按照我的步骤来写,或者直接复制通用程序中的代码来运行。
相关学习推荐:python视频教程
一、功能
明确画板的功能,方便后续编程。
用途:可调整颜色、绘图区域和鼠标输入。
二、框架搭建
有两个主要步骤:
第一步:颜色选择可以通过使用OpenCV的滑动条语句cv.createTrackbar来设置。Cv.createTrackbar有五个参数设置,分别是(Trackbar名称、目标窗口名称、起始值——也是默认值、最大值和回调函数)。
#创建画布
img=np.zeros((300,512,3),np.uint8)
#命名画布3354需要提供给Trackbar
cv.namedWindow(“图像”)
#用RGB创建Trackbar,return函数什么都不用做。
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:OFFn1:ON
cv.createTrackbar(开关,图像,0,1,无)
#回调函数,什么都不用做
什么都不定义(x):
通过第二步:捕捉鼠标动作的状态,并根据鼠标动作,可以在绘图区绘制图形。在python中可以通过使用语句* events=[I for I in dir(CV if event in I]*来查看常见的鼠标操作语句。
#设置是否开始绘画的开关。
绘图=假
#定义绘图功能
定义绘制(事件,x,y,标志,参数):
#使用drawing开关作为全局变量,以便它的值可以在每次操作后更改。
全局绘图
#使用函数cv。EVENT_LBUTTONDOWN,如果按下鼠标左键,画一个圆,画图为真。
如果事件==cv。EVENT_LBUTTONDOWN:
cv.circle(img,(x,y),3,(g,b,r),-1)
绘图=真实
#如果鼠标移动,请执行以下操作
elif事件==cv。事件_鼠标移动:
#如果画图是真的,开始画圆
如果绘图==True:
cv.circle(img,(x,y),3,(g,b,r),-1)
#如果抬起鼠标左键,绘制最后一个圆,并将drawing设置为False,则绘制将停止。
elif事件==cv。EVENT_LBUTTONUP:
cv.circle(img,(x,y),3,(g,b,r),-1)
绘画=假三、主函数
主要功能是整合以上两部分。
而(1):
#显示画布
cv.imshow(image ,img)
#设置结束按钮。为了确保在非ASCII编码的32/64位系统或键盘上正常工作,使用0xFF取低八位。
k=cv.waitKey(1)0xFF
#如果k是27,即键盘上Esc的ASCII码序列号,退出画板
如果k==27:
破裂
#获取每个跟踪条中的值
r=cv.getTrackbarPos(R , image )
g=cv.getTrackbarPos(G , image )
b=cv.getTrackbarPos(B , image )
s=cv.getTrackbarPos(开关,“图像”)
#如果开关为0,清空画板,禁止画图,如果为1,允许。
如果s==0:
img[:]=0
else:
cv.setMouseCallback(image ,draw)
#最后别忘了破坏窗户
四、运行效果
五、总结
从这个简单的画板中,我们主要学习使用鼠标函数cv.setMouseCallback,以及两个基本的OpenCV函数cv.createTrackbar,并探究其中的细节,找出需要注意的地方。
六、总程序
将cv2作为cv导入
将numpy作为np导入
什么都不定义(x):
及格
img=np.zeros((300,512,3),np.uint8)
cv.namedWindow(“图像”)
cv.createTrackbar(R , image ,0,255,nothing)
cv.createTrackbar(G , image ,0,255,nothing)
cv.createTrackbar(B , image ,0,255,nothing)
switch=0:OFFn1:ON
cv.createTrackbar(开关,图像,0,1,无)
绘图=假
定义绘制(事件,x,y,标志,参数):
全局绘图
如果事件==cv。EVENT_LBUTTONDOWN:
cv.circle(img,(x,y),3,(g,b,r),-1)
绘图=真实
elif事件==cv。事件_鼠标移动:
如果绘图==True:
cv.circle(img,(x,y),3,(g,b,r),-1)
elif事件==cv。EVENT_LBUTTONUP:
cv.circle(img,(x,y),3,(g,b,r),-1)
绘图=假
而(1):
cv.imshow(image ,img)
k=cv.waitKey(1)0xFF
如果k==27:
破裂
r=cv.getTrackbarPos(R , image )
g=cv.getTrackbarPos(G , image )
b=cv.getTrackbarPos(B , image )
s=cv.getTrackbarPos(开关,"图像")
如果s==0:
img[:]=0
else:
cv.setMouseCallback(image ,draw)
cv.destroyAllWindows()以上就是基于中文版实现简单画板功能详解的详细内容,更多请关注盛行信息技术软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。