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 相关文章推荐
web.py获取上传文件名的正确方法
Aug 26 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
Python 利用内置set函数对字符串和列表进行去重的方法
Jun 29 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
Python3.5文件修改操作实例分析
May 01 Python
快速解决vue.js 模板和jinja 模板冲突的问题
Jul 26 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
Feb 07 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
python nohup 实现远程运行不宕机操作
Apr 16 Python
如何在django中实现分页功能
Apr 22 Python
pandas分批读取大数据集教程
Jun 06 Python
关于Kotlin中SAM转换的那些事
Sep 15 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
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
菜单效果
2006/10/14 Javascript
5 cool javascript apps
2007/03/24 Javascript
用javascript实现画板的代码
2007/09/05 Javascript
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
js中关于一个分号的崩溃示例
2013/11/11 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
vue2.0 + element UI 中 el-table 数据导出Excel的方法
2018/03/02 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
Vue ​v-model相关知识总结
2021/01/28 Vue.js
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
使用pip安装python库的多种方式
2019/07/31 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
python如何爬取动态网站
2020/09/09 Python
python 实现"神经衰弱"翻牌游戏
2020/11/09 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
教师实习自我鉴定
2013/12/13 职场文书
中学自我评价
2014/01/31 职场文书
2014年小学教师工作总结
2014/11/10 职场文书
八一建军节主持词
2015/07/01 职场文书