【Opencv3+Python3入门(7)调整对比度与亮度使用createTrackbar()滑动条】

在Opencv中封装了许多函数,而这些函数的调用形式通常都是以cv.×××等命名的,根据意思来进行判断就能够判断出来个大概。html

 

图像调整对比度与亮度:

#7,调整图片对比度和亮度
import cv2 as cv
import numpy as np

def contrast_Ratio_brightness(image,a,g):
    #a为对比度,g为亮度
    h,w,c=image.shape
    #建立一个全白色图像。
    mask=np.zeros([h,w,c],image.dtype)
    #cv.addWeighted函数对两张图片线性加权叠加
    dstImage=cv.addWeighted(image,a,mask,1-a,g)
    cv.imshow("dstImage",dstImage)
srcImage4=cv.imread(r'F:\OutputResult\SrcImage\saber18.jpg',-1)
print(srcImage4.shape)
cv.imshow("Saber",srcImage4)
contrast_Ratio_brightness(srcImage4,1.8,10)
cv.waitKey(0)
cv.destroyAllWindows()

函数说明:python

cv.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]),计算两个数组的加权和。数组

src1:参数src1第一个输入数组。函数

alpha:第一个数组元素的参数alpha权重。ui

src2:参数src2与src1大小和通道号相同的第二个输入数组。spa

beta:第二个数组元素的参数beta权重。.net

gamma:将参数gamma scalar添加到每一个和中。scala

dst:输出与输入阵列具备相同大小和通道数的dst输出阵列。指针

dtype:输出数组的可选深度;当两个输入数组的深度相同时,dtype能够设置为-1,至关于src1.depth()。code

程序结果:

cv.createTrackbar()滑动条的使用:

在上面的对比度与亮度调节过程当中,我但愿用一个滑动条来动态地修改两者的值,而不是每一次修改都须要重新输入。此时,就须要应用Opencv中的滑动条建立的函数cv.createTrackbar()函数。

有一个问题就是滑动条每次滑动变动的最小单位为1,我试了若是初值设置为小数就报错了。

一个滑动条只能用于一个参数,若是须要改变多个参数,可使用多个滑动条

createTrackbar(trackbarName, windowName, value, count, onChange)

参数一:trackbarName:滑动空间的名称;

参数二:windowName:滑动空间用于依附的图像窗口的名称;

参数三:value:初始化阈值;

参数四:count:滑动控件的刻度范围;最小值默认为0。

参数五:onChange是回调函数(所谓回调函数即每次修改滑动条后,须要传入新变量的函数)的名称,其定义以下:

onchange:void foo(int,void*)。

其中第一个参数是滑动条位置,第二个参数是用户数据(请参见下一个参数)。若是回调是空指针,则不调用回调,但只更新值

用户数据:按原样传递给回调的用户数据。它能够用来处理滑动条事件而不使用全局变量。

注意:须要在回调函数内部采用函数cv.getTrackbarPos获取滑动条位置处的值,否则若是存在多个滑动条时,函数没法获取更新后的参数值。

 

import cv2 as cv
import numpy as np

def contrast_Ratio_brightness(arg):
    #arg参数:为接收新变量地址
    #a为对比度,g为亮度
    #cv.getTrackbarPos获取滑动条位置处的值
    #第一个参数为滑动条1的名称,第二个参数为窗口的名称。
    a = cv.getTrackbarPos(trackbarName1, windowName)
    g = cv.getTrackbarPos(trackbarName2, windowName)
    h,w,c=image.shape
    mask=np.zeros([h,w,c],image.dtype)
    #cv.addWeighted函数对两张图片线性加权叠加
    dstImage=cv.addWeighted(image,a,mask,1-a,g)
    cv.imshow("dstImage",dstImage)
image=cv.imread(r'F:\OutputResult\SrcImage\saber18.jpg')
cv.imshow("Saber",image)
trackbarName1="Ratio_a"
trackbarName2="Bright_g"
windowName="dstImage"
a=1#设置a的初值。
g=10#设置g的初值。
count1=20#设置a的最大值
count2=50#设置g的最大值
#给滑动窗口命名,该步骤不能缺乏!并且必须和须要显示的滑动条窗口名称一致。
cv.namedWindow(windowName)

#第一个参数为滑动条名称,第二个参数为窗口名称,
#第三个参数为滑动条参数,第四个为其最大值,第五个为须要调用的函数名称。
cv.createTrackbar(trackbarName1, windowName,a,count1,contrast_Ratio_brightness)
cv.createTrackbar(trackbarName2, windowName,g,count2,contrast_Ratio_brightness)
#下面这步调用函数,也不能缺乏。
contrast_Ratio_brightness(0)

cv.waitKey(0)
cv.destroyAllWindows()

 

运行结果:

 

参考博客:

https://blog.csdn.net/u012005313/article/details/69675803

https://docs.opencv.org/2.4.11/modules/highgui/doc/user_interface.html#createtrackbar