Python-opencv学习第六课:Trackbar/滚动条操作演示(调整图像亮度)
一、学习部分
记录笔者学习Python-opencv第六课:Trackbar/滚动条操作演示(调整图像亮度),代码资料来源于网络贾老师视频。
二、代码部分
1.引入库
代码如下:
import cv2 as cv
import numpy as np
2.定义一个调整亮度函数和读入图片并展示,创建window和trackbar
代码如下:
def adjust_light_demo():
image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
cv.createTrackbar("lightness","input",0,100,nothing)#创建一个名为lightness的trackbar,0-100,无回调
cv.imshow("input", image)
blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
3.拖动trackbar
代码如下:
while True:
pos=cv.getTrackbarPos("lightness","input")#拖动第几个TrackBar
blank[:,:]=(pos,pos,pos)#让blank空白窗口上面的像素都是50x50
#cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
result=cv.add(image,blank)
cv.imshow("result", result)#显示取反后的图片
#cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
c=cv.waitKey(1)#设置关闭窗口
if c == 27:#Esc
break
cv.destroyAllWindows()
4.完整代码
代码如下:
import cv2 as cv
import numpy as np
def read_demo_():
image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") # BGR 0-255
cv.imshow("input", image)
cv.waitKey(0)
cv.destroyAllWindows()
def color_space_demo_():
image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") # BGR 0-255
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#将bgr转换为gray
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#将bgr转换为hsv
thsv=cv.cvtColor(image,cv.COLOR_HSV2BGR)#将HSV转换为BGR
# cv.namedwindow("input",cv.WINDOW.AUTOSIZE)
cv.imshow("gray", gray)#显示一个窗口名为gray的gray图像
cv.imshow("hsv", hsv)#显示一个窗口名为hsv的hsv图像
cv.imshow("thsv", thsv) # 显示一个窗口名为thsv的thsv图像
cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
cv.destroyAllWindows()
def mat_demo_():
image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") # BGR 0-255
h,w,c=image.shape #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
roi = image[100:200, 100:200, :] # 感兴趣局部区域像素分布 H高度100-200像素,W宽度100-200像素。灰度图像就没有最后一个冒号
blank=np.zeros((h,w,c),dtype=np.uint8)#产生一个空白窗口,需要说明H,W,C以及字节数,这是区别于np.zeros_like()函数。
#blank[60:200, 60:280, :] = image[60:200, 60:280, :] # blank和image要一致才能匹配
#blank = np.copy(image)#使用copy函数直接进行复制,将blank上述注释掉
blank=image#实现原图到blank的复制
cv.imshow("image", image)#显示原图窗口
cv.imshow("blank", blank)#显示blank空白窗口
cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
cv.destroyAllWindows()
def pixel_demo():
image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
cv.imshow("input", image)
h, w, c = image.shape#打印图像维度
for row in range(h):#行
for col in range(w):#列
b,g,r=image[row,col]#图像写像素
image[row,col]=(0,g,r)#取反操作,可对其进行更改
cv.imshow("result", image)#显示取反后的图片
cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
cv.waitKey(0)#设置关闭窗口
cv.destroyAllWindows()
def math_demo():
image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
cv.imshow("input", image)
h, w, c = image.shape#打印图像维度
blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
blank[:,:]=(2,2,2)#让blank空白窗口上面的像素都是50x50
cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
#result=cv.add(image,blank)#进行加减时候,两幅图像大小必须一致,数据类型可以不用一致(增加亮度变亮)
#result = cv.subtract(image, blank) # 进行加减时候,两幅图像大小必须一致,数据类型可以不用一致(减少亮度变黑)
result = cv.divide(image, blank)#改变对比度,对比度降低
#result = cv.multiply(image, blank)#改变对比度,对比度提高
cv.imshow("result", result)#显示取反后的图片
#cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
cv.waitKey(0)#设置关闭窗口
cv.destroyAllWindows()
def nothing(x):
print(x)
def adjust_light_demo():
image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
cv.createTrackbar("lightness","input",0,100,nothing)#创建一个名为lightness的trackbar,0-100,无回调
cv.imshow("input", image)
blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
while True:
pos=cv.getTrackbarPos("lightness","input")#拖动第几个TrackBar
blank[:,:]=(pos,pos,pos)#让blank空白窗口上面的像素都是50x50
#cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
result=cv.add(image,blank)
cv.imshow("result", result)#显示取反后的图片
#cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
c=cv.waitKey(1)#设置关闭窗口
if c == 27:#Esc
break
cv.destroyAllWindows()
if __name__ == "__main__":
adjust_light_demo()
五、运行结果
总结
本文介绍了笔者学习Python-opencv第六课:Trackbar/滚动条操作演示(调整图像亮度),学习了动态改变图像亮度,实现滚动条操作演示/trackbar(代码资料来源于网络贾老师视频)
|