在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
程序结果:
在上面的对比度与亮度调节过程当中,我但愿用一个滑动条来动态地修改两者的值,而不是每一次修改都须要重新输入。此时,就须要应用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