本文主要内容来自于 OpenCV-Python 教程 的 OpenCV 中的 GUI 功能 部分,这个部分的主要内容如下:

  • 图像操作入门
    学习加载一幅图像,显示它,并保存它
  • 视频入门
    学习播放视频,从摄像头捕捉视频,以及写入视频
  • OpenCV 中的绘制功能
    学习通过 OpenCV 绘制线、矩形、椭圆形和圆形等等
  • 鼠标作为画笔
    用鼠标画东西
  • 轨迹栏作为调色板
    创建轨迹栏以控制某些参数

目标

  • 学习将轨迹栏绑定到 OpenCV 窗口
  • 我们将学习这些函数: cv.getTrackbarPos()cv.createTrackbar() 等等。

代码演示程序

这里我们将创建一个简单的应用程序,它展示我们指定的颜色。这个应用中有一个展示颜色的窗口,以及三个轨迹栏以分别指定 B,G 和 R 颜色值。我们滑动轨迹栏并相应地更改窗口颜色。默认情况下,初始颜色将设置为黑色。

对于  cv.createTrackbar() 函数,第一个参数是轨迹栏的名称,第二个参数是它所附加的窗口的名称,第三个参数是默认值,第四个是最大值,第五个是每次轨迹栏值更改时执行的回调函数。回调函数始终只有一个参数,即轨迹栏的位置。因而在轨迹栏事件的回调函数中,无法区分是绑定的哪个轨迹栏实例所产生的事件。

轨迹栏的另一个重要应用是用作按钮或开关。OpenCV,默认情况下,没有按钮功能。因此,我们可以使用轨迹栏来获得这种功能。在我们的应用程序中,我们创建一个开关,应用程序只要在这个开关打开时才运行,否则屏幕总是黑色的。

def trackbar():# Create a black image, a windowimg = np.zeros((300, 512, 3), np.uint8)switch = Trueblue = 0green = 0red = 0def callback_factory(user_data):def callback(pos):nonlocal switch, blue, green, redif user_data == 'S':if pos == 0:switch = Falseelse:switch = Trueelif user_data == 'B':blue = poselif user_data == 'G':green = poselif user_data == 'R':red = posif not switch:img.fill(0)else:img[:] = (blue, green, red)cv.imshow('image', img)return callbackcv.namedWindow('image')# create trackbars for color changecv.createTrackbar('R', 'image', 0, 255, callback_factory('R'))cv.createTrackbar('G', 'image', 0, 255, callback_factory('G'))cv.createTrackbar('B', 'image', 0, 255, callback_factory('B'))# create switch for ON/OFF functionalityswitch = '0 : OFF \n1 : ON'cv.createTrackbar(switch, 'image', 0, 1, callback_factory('S'))cv.imshow('image', img)while True:k = cv.waitKey(1) & 0xFFif k == 27:breakcv.destroyAllWindows()

在这个示例程序中,为了及时响应发生的事件,同时也为了降低轮询各个轨迹栏的状态所带来的开销,图像的状态的改变以及绘制,直接在回调中完成。

这里为所有轨迹栏实例只实现了一个回调函数,为了能够在轨迹栏事件回调中区分事件是发生在哪个轨迹栏上的,而通过另一个函数,将回调函数包为闭包。

这里为了演示 cv.getTrackbarPos() 函数的用法,而在回调函数里用了这个函数,但这个调用也可以替换为回调函数的参数中的 pos。

这个应用程序的截屏看起来像下面这样:

OpenCV 提供的窗口等 GUI 接口,仅仅用于一般的示例程序编写,这部分接口的能力和灵活性与 GTK 或 QT 这种专业的 GUI 开发库所提供的能力和灵活性相差甚远。这部分的功能也不是 OpenCV 库的核心,因而也并不值得投入太大的时间和精力来学习。

参考文档

Trackbar as the Color Palette

Done.

OpenCV_006-OpenCV 轨迹栏作为调色板相关推荐

  1. opencv04:鼠标作为画笔以及轨迹栏作为调色板

    目标 了解如何在OpenCV中处理鼠标事件 cv2.setMouseCallback() 了解将轨迹栏固定到OpenCV窗口 cv2.getTrackbarPos() cv2.createTrackb ...

  2. 轨迹栏作为调色板 | 九

    目标 了解将轨迹栏固定到OpenCV窗口 您将学习以下功能:cv.getTrackbarPos,cv.createTrackbar等. 代码演示 在这里,我们将创建一个简单的应用程序,以显示您指定的颜 ...

  3. OpenCV中的GUI特性 —— 绘图+鼠标画笔+轨迹栏调色板

    OpenCV中的GUI特性 -- 绘图+鼠标画笔+轨迹栏调色板 这一部分内容主要包括OpenCV的绘图函数.鼠标回调函数与画图的结合和轨迹栏的使用,绘图函数的传参是关键,鼠标回调函数也是一个相当重要的 ...

  4. OpenCV基本线性变换轨迹栏的实例(附完整代码)

    OpenCV基本线性变换轨迹栏的实例 OpenCV基本线性变换轨迹栏的实例 OpenCV基本线性变换轨迹栏的实例 OpenCV基本线性变换轨迹栏的实例(附完整代码) #include "op ...

  5. [opencv] 练习题实现 使用轨迹栏创建颜色和画笔半径可调的Paint应用程序。有关绘制的信息,请参阅有关鼠标处理的先前教程。

    1.问题背景 opencv 官方手册 文档 练习题 使用轨迹栏创建颜色和画笔半径可调的Paint应用程序.有关绘制的信息,请参阅有关鼠标处 理的先前教程. 2.代码部分 另外一个官方demo留下的作业 ...

  6. opencv python下载_[福利] OpenCV4 Python 最新中文版官方教程来了(附下载)

    教程简介 OpenCV 是计算机视觉中经典的专用库,然而其中文版官方教程久久不来.近日,一款最新 OpenCV4.1 版本的完整中文版官方教程出炉,读者朋友可以更好的学习了解 OpenCV 相关细节. ...

  7. basler相机参数简要中文说明_附下载| OpenCV最新中文版官方教程

    OpenCV是计算机视觉中经典的专用库,然而其中文版官方教程久久不来.近日,一款最新OpenCV4.1 版本的完整中文版官方教程出炉,读者朋友可以更好的学习了解OpenCV相关细节.教程根据官方提供的 ...

  8. OpenCV 中的绘制功能

    本文主要内容来自于 OpenCV-Python 教程 的 OpenCV 中的 GUI 功能 部分,这个部分的主要内容如下: 图像操作入门 学习加载一幅图像,显示它,并保存它 视频入门 学习播放视频,从 ...

  9. opencv python教程-OpenCV4 Python 最新中文版官方教程来了(附下载)

    教程简介 OpenCV 是计算机视觉中经典的专用库,然而其中文版官方教程久久不来.近日,一款最新 OpenCV4.1 版本的完整中文版官方教程出炉,读者朋友可以更好的学习了解 OpenCV 相关细节. ...

最新文章

  1. Firefox显示 您的链接不安全 的解决办法
  2. linux的yum update命令
  3. 部署harbor1.2.0开启ldap验证
  4. 世界定级 企业即时通讯软件
  5. window.location.href和window.location.replace
  6. 解决安装XAMPP 浏览器输入localhost 出现404错误的问题
  7. 【 VS 插件开发 】三、Vs插件简单功能的实现
  8. java 表格布局_Java怎样把表格放在绝对定位的面板上
  9. python人脸识别代码实现
  10. T32 获取电脑Product ID
  11. MATLAB 剔除异常点
  12. java生成不重复8位数字_如何生成8位随机不重复的数字编号
  13. 深度分析: Google 和 Apple 从来就不是死对头
  14. python输出间隔符_python print 使用分隔符 或行尾符
  15. 艾美智能影库服务器ip,艾美影库 篇一:艾美影库 | 精评丨性能与资源可兼得 艾美MS-200 高清影库...
  16. 此次告别ed2k链接文件下载烦恼
  17. 小狐狸对于个人职业规划的思考
  18. jsjs调用app下载或者打开app 实现有所变动
  19. 程序员进阶知识点!java链表ListNode
  20. Link3D-基于cocos3d的连连看游戏(第一篇)

热门文章

  1. 案例_文件下载_代码实现
  2. tomcat_部署项目的方式
  3. mysql日期/时间转换为字符串
  4. SpringBoot高级-任务-邮件任务
  5. 创建用户赋权限_MySQL实战第84篇:MySQL数据库添加用户和赋权限,在8.0版本!
  6. spring 依赖注入总结
  7. 13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复
  8. Jquery+php+ajax实现表单异步提交,动态添加回复评论
  9. ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)G GCD Guessing Game
  10. Llama-impala on yarn的中间协调服务