Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色


Posted in Python onMarch 09, 2020

!!!本博客,是对图像的背景颜色的修改的基础讲解~!!!
还包括一个练习——是对背景色修改的一点应用尝试!!!——始终相信学习多一点探索,脚步会更坚定一些~

愿所有正在努力的人都可以坚持自己的路一直走下去!

实现轨迹(跟踪)栏功能的函数

函数主要参数讲解

cv.createTrackbar()——创建一个轨迹(跟踪)栏
cv.getTrackbarPos()——获取一个轨迹(跟踪)栏的值

cv.createTrackbar()参数如下:

  • 参数一:trackbarname——轨迹(跟踪)栏名称
  • 参数二:winname——需要挂载轨迹(跟踪)栏的窗体名
  • 参数三:value——默认值
  • 参数四:count——上限值
  • 参数五:onChange ——轨迹(跟踪)栏的回调执行函数
  • (一般仅仅是通过轨迹栏修改值,然后读取的话,这个参数可以不用管)参数六:userdata ——作为回调传递的用户数据。它可以在不使用全局变量的情况下处理trackbar事件。

cv.getTrackbarPos()参数如下:

  • 参数一:trackbarname——需要读取的轨迹(跟踪)栏名称
  • 参数二:winname——对应的窗体名

代码实现

我们先创建一个窗体,为轨迹(跟踪)栏的挂载做准备
~照片就默认创建一张黑色图片

import cv2 as cv
import numpy as np

img = np.zeros((512, 512, 3), np.uint8)
cv.namedWindow('imag', cv.WINDOW_NORMAL)
cv.resizeWindow('imag', 510, 510)

接着我们把需要的轨迹(跟踪)栏添加到这个窗体中(记得必须要创建轨迹(跟踪)栏回调函数的!!!)
回调函数可以为pass空函数——但是必须要有!!!

这次要实现背景色的控制,那么我们设置三个轨迹(跟踪)栏,每一个轨迹栏对应一个0~255的值——对应BGR中的三色值!!!

def nothing(x):
 pass

# 参数依次为:设置轨迹(跟踪)栏名字,挂载的窗体, 默认值, 最大值,回调函数
cv.createTrackbar('R', 'imag', 0, 255, nothing) # R的值——nothing传入一个空函数体,不执行任何回调函数
cv.createTrackbar('G', 'imag', 0, 255, nothing) # G的值
cv.createTrackbar('B', 'imag', 0, 255, nothing) # B的值

switch = '1:ON\n0:OFF'
cv.createTrackbar(switch, 'imag', 0, 1, nothing) 
 # 设置一个开关——当为1时,图片背景可以改变——否则为黑色

显示主体部分的代码

while True:
  cv.imshow('imag', img)
  k = cv.waitKey(1) & 0xFF
  if k == 27: # ESC退出
   break
  if cv.getTrackbarPos(switch, 'imag') == 1: # 当swtch轨迹(跟踪)栏的值为1时,允许改变背景色
   img[:] = [cv.getTrackbarPos('B', 'imag'), cv.getTrackbarPos('G', 'imag'), cv.getTrackbarPos('R', 'imag')]
   # getTrackbarPos的参数为:读取值的轨迹(跟踪)栏名,所在的窗体名
   # opencv的颜色为BGR——依次获取轨迹(跟踪)栏的值就可以了~
  else: # 否则为默认黑色
   img[:] = 0
 cv.destroyAllWindows()

效果

完整代码

import cv2 as cv
import numpy as np
def nothing(x):
 pass

if __name__ == "__main__":
 img = np.zeros((512, 512, 3), np.uint8)
 cv.namedWindow('imag', cv.WINDOW_NORMAL)
 cv.resizeWindow('imag', 510, 510)

 cv.createTrackbar('R', 'imag', 0, 255, nothing)
 cv.createTrackbar('G', 'imag', 0, 255, nothing)
 cv.createTrackbar('B', 'imag', 0, 255, nothing)
 
 switch = '1:ON\n0:OFF'
 cv.createTrackbar(switch, 'imag', 0, 1, nothing)
 while True:
  cv.imshow('imag', img)
  k = cv.waitKey(1) & 0xFF
  if k == 27:
   break
  if cv.getTrackbarPos(switch, 'imag') == 1:
   img[:] = [cv.getTrackbarPos('B', 'imag'), cv.getTrackbarPos('G', 'imag'), cv.getTrackbarPos('R', 'imag')]
  else:
   img[:] = 0
 cv.destroyAllWindows()

效果

默认打开的样子~

Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色

此时调节背景色是不改变的~

Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色

当打开时,背景色就会发生改变了~

Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色

小训

训练要求

我们通过鼠标绘制一些东西,然后将背景颜色的修改,作为图片刷新(清空内容)~

代码结构

鼠标回调函数(包含包的引用)

import cv2 as cv
import numpy as np
drawing = False
line_size = 2


def mouse_function(event, x, y, flags, param): # 鼠标回调函数——执行鼠标左键按下后移动绘图
 global drawing, line_size
 if event == cv.EVENT_LBUTTONDOWN:
  drawing = True
 elif event == cv.EVENT_MOUSEMOVE:
  if drawing is True:
   cv.circle(img, (x, y), line_size, (0, 125, 255), -1, cv.LINE_AA)
 elif event == cv.EVENT_LBUTTONUP:
  drawing = False
  cv.circle(img, (x, y), line_size, (0, 125, 255), -1, cv.LINE_AA)

轨迹(跟踪)栏回调函数

# 这里不需要任何操作~所以用pass空函数体即可
def nothing(x):
 pass

__main__主体代码
if __name__ == "__main__":
 img = np.zeros((512, 512, 3), np.uint8)
 cv.namedWindow('imag', cv.WINDOW_NORMAL)
 cv.resizeWindow('imag', 510, 510)
 cv.setMouseCallback('imag', mouse_function) # 实现鼠标回调函数

 cv.createTrackbar('R', 'imag', 0, 255, nothing) # 设置R轨迹(跟踪)栏
 cv.createTrackbar('G', 'imag', 0, 255, nothing)
 cv.createTrackbar('B', 'imag', 0, 255, nothing)
 
 switch = '1:ON\n0:OFF'
 cv.createTrackbar(switch, 'imag', 0, 1, nothing) # 设置开关控制轨迹(跟踪)栏

 while True:
  cv.imshow('imag', img)
  k = cv.waitKey(1) & 0xFF
  if k == 27:
   break
  if cv.getTrackbarPos(switch, 'imag') == 1: # 为1是,刷新画面
   img[:] = [cv.getTrackbarPos('B', 'imag'), cv.getTrackbarPos('G', 'imag'), cv.getTrackbarPos('R', 'imag')]
   cv.setTrackbarPos(switch, 'imag', 0) # 通过set轨迹(跟踪)栏位置,实现为1刷新后,及时回到0位置
 cv.destroyAllWindows()

效果:(小训练的代码连起来就可以直接运行的,这里就不单独再写一遍了)
先随意用鼠标写“开心”两个字~

Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色

接着点击这里(可能需要点一次选中轨迹(跟踪)栏,再点击才能执行变化)

Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色

然后就实现刷新了~

Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色

我们再写点其它的——

Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色

到这里小练习也就结束了——既练习了鼠标事件当作画笔,也实现了轨迹(跟踪)栏的设置和读取——当作画板刷新的功能(●'◡'●)

总结

到此这篇关于Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色的文章就介绍到这了,更多相关Python Opencv更改图像的背景颜色内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
让python同时兼容python2和python3的8个技巧分享
Jul 11 Python
Python EOL while scanning string literal问题解决方法
Sep 18 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
Jul 12 Python
Python中的命令行参数解析工具之docopt详解
Mar 27 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
Python实现多态、协议和鸭子类型的代码详解
May 05 Python
PyTorch的自适应池化Adaptive Pooling实例
Jan 03 Python
Python使用Excel将数据写入多个sheet
May 16 Python
python3通过qq邮箱发送邮件以及附件
May 20 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
Python中快速掌握Data Frame的常用操作
Mar 31 Python
pycharm实现在虚拟环境中引入别人的项目
Mar 09 #Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 #Python
python微信公众号开发简单流程实现
Mar 09 #Python
Python 面向对象部分知识点小结
Mar 09 #Python
Django跨域资源共享问题(推荐)
Mar 09 #Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
Mar 09 #Python
Python模块相关知识点小结
Mar 09 #Python
You might like
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
PHP中常用的输出函数总结
2014/09/22 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
jQuery 使用手册(一)
2009/09/23 Javascript
JS的replace方法介绍
2012/10/20 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
JQuery解析XML数据的几个简单实例
2016/05/18 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
Python中decorator使用实例
2015/04/14 Python
Python验证码识别的方法
2015/07/10 Python
Python矩阵常见运算操作实例总结
2017/09/29 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
python读取ini配置文件过程示范
2019/12/23 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
2014/12/12 面试题
实习生体会的自我评价范文
2013/11/28 职场文书
学校安全生产承诺书
2014/05/23 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
测量员岗位职责
2015/02/14 职场文书
求职意向书范本
2015/05/11 职场文书
指导老师鉴定意见
2015/06/05 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript