OpenCV做个简单的画图板—变化画笔颜色,粗细

2023-10-28 02:20

本文主要是介绍OpenCV做个简单的画图板—变化画笔颜色,粗细,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenCV做个简单的画图板—变化画笔颜色,粗细

  • 前言
    • 实现的功能
    • 实现思路
    • 实现步骤
    • 运行结果

前言

最近在学习OpenCV,照着官网的教程学习,学习Gui Features in Opencv,其中主要内容参考这一章节的内容,鼠标事件部分对应前一章的学习内容,链接如下:opencv官网教程
看本博客内容基本就可以实现这个章节内容,如果还有问题可以下载链接:源程序

实现的功能

这一节主要实现的功能是,利用Trackbar相关命令,实现功能如下:

  1. 实现实时画图功能;
  2. 通过R,G,B三色的拖拽条,实现颜色改变,更新画笔颜色;
  3. 通过拖拽条改变画笔粗细;
  4. 通过拖拽条做成“开关”,实现橡皮擦功能;
  5. 通过键盘按钮切换,可是实现画线或画矩形;

实现思路

  1. 当按下鼠标左键开始画笔功能,移动鼠标并且左键拖拽时,画圆,从而连接成曲线;
  2. 当拖拽画笔粗细拖拽条,改变画圆的半径大小;
  3. 当切换开关为“橡皮擦”,改变画圆的颜色为窗口画图板的背景色,这里是白色;
  4. 键盘“m”键可以切换画线模式和画矩形模式;

实现步骤

  1. 建立画图板窗口。底色为白色,尺寸为350*512。#底色和尺寸可以根据自己喜好而定,但此方法的底色只有黑白灰三色。
#create a white image, a window
img = 255*np.ones((350,512,3),np.uint8)
  1. 建立窗口和鼠标回调函数,用于监听鼠标事件,做出回应。
cv.namedWindow('image')
cv.setMouseCallback('image',draw_mousepush)
  1. 创建各功能拖动条,用来更改画笔颜色、粗细以及橡皮擦开关功能,不设拖动条回调函数
#create trackbars for color change,switch of erase,painter thickness
cv.createTrackbar('R','image',0,255,nothing)
cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)cv.createTrackbar('thickness','image',1,8,nothing)switch = 'erase'
cv.createTrackbar(switch,'image',0,1,nothing)
  1. 获取画笔信息功能函数get_painter,返回画笔颜色、画笔粗细、橡皮擦开关状态
#get info painter function
def get_painter():# get current positions of four trackbarsr = cv.getTrackbarPos('R', 'image')g = cv.getTrackbarPos('G', 'image')b = cv.getTrackbarPos('B', 'image')thickness = cv.getTrackbarPos('thickness','image')s = cv.getTrackbarPos(switch,'image')color = (b,g,r) #color scalesreturn color,thickness,s
  1. 完成鼠标动作回调函数
# mouse callback function
#initialize初始化
drawing = False #painter is false,not beginning painting
mode = False #切换画线和画矩形功能
ix, iy = 0, 0
def draw_mousepush(event,x,y,flags,param):global ix,iy,drawing,mode #引入全局变量color,thickness,s = get_painter() #从get_painter函数引入参数
# moniter mouse event.When push leftbutton down,beginning paintingif event == cv.EVENT_LBUTTONDOWN:drawing = Trueix, iy = x, y
#按住左键滑动,则开始在鼠标所在位置画圆,从而连成曲线elif event == cv.EVENT_MOUSEMOVE and flags == cv.EVENT_FLAG_LBUTTON:if drawing == True:if s == 1: #打开橡皮擦功能cv.circle(img,(x,y),10,(255,255,255),-1)else:if mode == False: #画线cv.circle(img,(x,y),thickness,color,-1)else:cv.rectangle(img,(ix,iy),(x,y),color,-1)elif event == cv.EVENT_LBUTTONUP:drawing = False
  1. 建立主函数
# main function
while(1):color,thickness,_ = get_painter()cv.imshow('image',img)k = cv.waitKey(1) & 0xFFif k ==27: #ESC退出breakelif k == ord('m'):mode = not mode
  1. ESC键,清除所有窗口
cv.destroyAllWindows()

运行结果

请忽略我略丑的字体,哈哈
运行结果

这篇关于OpenCV做个简单的画图板—变化画笔颜色,粗细的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/290041

相关文章

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

使用EasyExcel实现简单的Excel表格解析操作

《使用EasyExcel实现简单的Excel表格解析操作》:本文主要介绍如何使用EasyExcel完成简单的表格解析操作,同时实现了大量数据情况下数据的分次批量入库,并记录每条数据入库的状态,感兴... 目录前言固定模板及表数据格式的解析实现Excel模板内容对应的实体类实现AnalysisEventLis