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

版权声明:本文为博主原创文章,转载时须注明出处 https://blog.csdn.net/KID_yuan/article/details/89495613

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

 

图像调整对比度与亮度:

#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()

函数说明:

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

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

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

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

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

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

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

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

程序结果:

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

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

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

一个滑动条只能用于一个参数,如果需要改变多个参数,可以使用多个滑动条

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

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

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

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

参数四:count:滑动控件的刻度范围;

参数五: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

猜你喜欢

转载自blog.csdn.net/KID_yuan/article/details/89495613