网站首页 > 教程分享 正文
使用cv2.createTrackerbar()动态改变图像亮度
在使用opencv读取图像时,我们有时需要动态的改变图像的亮度,这就需要用到opencv自带的滚动滑块函数cv2.createTrackerbar()。通过官方文档可知该函数有5个参数:
- trackbarName:滚动滑块的名称;
- windowName:添加滚动滑块窗口的名称;
- value:滑块的初始位置;
- count:滑块可以移动的最大值;
- onChange:指向每次滑块更改位置时要调用的函数的指针,有默认值0。此函数的原型应为void XXX (int, void *); ,其中第一个参数是轨迹栏位置,第二个参数是用户数据(请参阅下一个参数)。如果回调是NULL指针,则不调用任何回调,而仅更新值。
以下图为例去动态的修改图像的亮度:
具体代码:
# -*-coding:utf-8-*-
"""
File Name: trackBar_operation.py
Program IDE: PyCharm
Create File By Author: Hong
"""
import cv2 as cv
import numpy as np
def nothing(x):
pass
def adjust_lightness(image_path: str, value=0, count=100):
"""
使用滚动滑块调整图像的亮度
:param image_path: 传入图像文件的路径
:param value: 滑块初始位置
:param count: 滑块可以移动的最大值
:return: 没有返回值
"""
img = cv.imread(image_path, cv.IMREAD_COLOR)
cv.namedWindow('input', cv.WINDOW_KEEPRATIO)
cv.createTrackbar('lightness', 'input', value, count, nothing)
cv.imshow('input', img)
blank = np.zeros_like(img)
while True:
pos = cv.getTrackbarPos('lightness', 'input')
blank[:, :] = [pos, pos, pos]
result = cv.add(img, blank)
print('lightness: ', pos)
cv.imshow('result', result)
c = cv.waitKey(1)
if c == 25:
break
if __name__ == '__main__':
path = 'images/daiyutong.png'
adjust_lightness(path)
结果展示:通过移动滑块位置,可以实时查看图像的亮度变化。
添加双滑块,使用cv.addWeighted()动态改变图像的亮度和对比度
OpenCV中的融合函数cv.addWeighted()可以对两张图像进行融合或者将两张图像相加。该函数有7个参数。
- src1 输入图片
- alpha 第一张图片的权重
- src2 和第一张输入图片有相同形状
- beta 第二张图片的权重
- gamma 静态权重,添加到图像的所有像素中
- dst 默认值为None,dst = src1*alpha + src2*beta + gama
同样以上图为例,使用该函数同时调整图像的亮度和对比度。
具体代码是:
# -*-coding:utf-8-*-
"""
File Name: trackBar_operation.py
Program IDE: PyCharm
Create File By Author: Hong
"""
import cv2 as cv
import numpy as np
def nothing(x):
pass
def trackbar_to_adjust(image_path: str):
"""
通过OpenCV的tackBar滑块动态的修改图像的亮度和对比度
:param image_path: 传入图片文件路径
:return: 没有返回值
"""
img = cv.imread(image_path)
cv.namedWindow('input', cv.WINDOW_KEEPRATIO)
cv.createTrackbar('lightness', 'input', 0, 100, nothing) # 第3个参数代表滑块初始位置;第4个参数代表滑块可以滑动的最大值
cv.createTrackbar('contrast', 'input', 100, 200, nothing)
cv.imshow('input', img)
blank = np.zeros_like(img) # 创建一个与img形状相同的图像blank
while True:
light = cv.getTrackbarPos('lightness', 'input') # 控制亮度的滚动条
contrast = cv.getTrackbarPos('contrast', 'input') / 100 # 控制对比度的滚动条
print('light: {}, contrast: {}.'.format(light, contrast))
result = cv.addWeighted(img, contrast, blank, 0.5, light)
cv.imshow('result', result)
c = cv.waitKey(1)
if c == 27:
break
cv.destroyAllWindows()
if __name__ == '__main__':
path = 'images/daiyutong.png'
trackbar_to_adjust(path)
效果展示:
获取更多opencv和计算机视觉知识,请关注微信公众号 “AI与计算机视觉”。
猜你喜欢
- 2024-10-24 【创新办公】J5create虫洞交换器实现双设备无缝连接。
- 2024-10-24 十铨发布T-CREATE雷电3外接式固态硬盘,以及T-FORCE CARDEA Z44L SSD
- 2024-10-24 j5create USB 3.0跨平台传输线,让两台设备传输文件更方便
- 2024-10-24 C#常见错误_调用第三方动态库dll(c#调用c动态库)
- 2024-10-24 百万Java 面试题整理(1.0)(100个java面试题及答案)
- 2024-10-24 windows11 上无法在vs2019上执行powershell脚本的解决方案
- 2024-10-24 opencv实时识别指定物体(opencv实现图像识别)
- 2024-10-24 使用内存映射文件实现进程通信(内存映射什么意思)
- 2024-10-24 全程软件测试(六十六):软件测试之MySQL基础—读书笔记
- 2024-10-24 c++内存泄漏解决方案(c++内存泄漏的原因)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)