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之关于类的初步认识
Oct 11 Python
Python遍历文件夹和读写文件的实现代码
Aug 28 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
python执行精确的小数计算方法
Jan 21 Python
对Python3使运行暂停的方法详解
Feb 18 Python
Python函数的参数常见分类与用法实例详解
Mar 30 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
Python数据存储之 h5py详解
Dec 26 Python
基于Python实现人脸自动戴口罩系统
Feb 06 Python
Django自定义列表 models字段显示方式
Apr 03 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
Apr 28 Python
python实现自动打卡的示例代码
Oct 10 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引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
php fsockopen伪造post与get方法的详解
2013/06/14 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
详解javascript函数写法大全
2019/03/25 Javascript
学习python 之编写简单乘法运算题
2016/02/27 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
python socket 聊天室实例代码详解
2019/11/14 Python
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
中学生校园广播稿
2014/01/16 职场文书
教师开学感言
2014/02/14 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
创业女性典型材料
2014/05/02 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
python 如何用terminal输入参数
2021/05/25 Python