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

作者:笔岸柳影 时间:2021-12-03 04:04:53 

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

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

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

函数主要参数讲解

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 通过轨迹(跟踪)栏实现更改整张图像的背景颜色

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

来源:https://blog.csdn.net/weixin_44604887/article/details/104720021

标签:Python,Opencv,轨迹跟踪,背景,颜色
0
投稿

猜你喜欢

  • 开展全面的网站评估

    2007-09-27 19:21:00
  • Asp中Scripting.TextStream 对象介绍

    2007-11-02 12:19:00
  • ASP实现上传图片自动压缩图片大小

    2010-01-25 12:47:00
  • 无法使用pip命令安装python第三方库的原因及解决方法

    2023-11-24 00:32:33
  • keras 简单 lstm实例(基于one-hot编码)

    2023-07-11 05:42:04
  • 简单的Python的curses库使用教程

    2023-11-06 15:04:28
  • 轻松掌握python设计模式之策略模式

    2022-01-19 00:17:15
  • 深入研究ASP中的Session

    2007-09-13 12:37:00
  • Python Django2.0集成Celery4.1教程

    2023-10-17 21:28:52
  • mysql 安装使用小记

    2011-02-23 12:33:00
  • 深入分析python中整型不会溢出问题

    2022-11-20 01:19:13
  • 详解python中读取和查看图片的6种方法

    2023-10-10 16:40:48
  • ASP中的Debug类--VBScript

    2008-10-24 09:38:00
  • Pandas时间序列重采样(resample)方法中closed、label的作用详解

    2023-01-31 17:46:36
  • Python学习之包与模块详解

    2021-05-26 03:40:07
  • 轻松解决SQL Server 2005中的常见问题

    2008-11-28 14:11:00
  • MySQL复制的概述、安装、故障、技巧、工具

    2011-04-11 08:36:00
  • Python字典和集合讲解

    2021-03-05 22:31:14
  • python自动截取需要区域,进行图像识别的方法

    2021-05-14 11:04:42
  • PHP用PDO如何封装简单易用的DB类详解

    2023-11-23 16:05:39
  • asp之家 网络编程 m.aspxhome.com