opencv如何实现简单画板的功能

  介绍

本篇文章为大家展示了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 ()

<强>四、运行效果

 opencv如何实现简单画板的功能

<强>五、总结

从这个简单的画板,我们主要学习运用了鼠标函数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如何实现简单画板的功能