python -opencv 使用滑动条
函数createTrackbar:
cv2.createTrackbar(“scale”, “display”, 0, 100, self.opencv_calibration_node.on_scale)
功能:
绑定滑动条和窗口,定义滚动条的数值
参数
- 第一个参数时滑动条的名字,
- 第二个参数是滑动条被放置的窗口的名字,
- 第三个参数是滑动条默认值,
- 第四个参数时滑动条的最大值,
- 第五个参数时回调函数,每次滑动都会调用回调函数。
函数getTrackbarPos:
cv2.getTrackbarPos()
功能:
得到滑动条的数值
参数
- 第一个参数是滑动条名字,
- 第二个时所在窗口,
- 返回值是滑动条的数值。
函数setTrackbarPos:
cv2.setTrackbarPos(‘Alpha’, ‘image’, 100)
功能:
设置滑动条的默认值
参数
- 第一个参数是滑动条名字,
- 第二个时所在窗口,
- 第三个参数是滑动条默认值,
举例:
import cv2
import numpy as np
alpha = 0.3
beta = 80
img_path = "2.jpg"
img = cv2.imread(img_path)
img2 = cv2.imread(img_path)
def updateAlpha(x):
global alpha, img, img2
# 得到数值
alpha = cv2.getTrackbarPos('Alpha', 'image')
alpha = alpha * 0.01
img = np.uint8(np.clip((alpha * img2 + beta), 0, 255))
def updateBeta(x):
global beta, img, img2
beta = cv2.getTrackbarPos('Beta', 'image')
img = np.uint8(np.clip((alpha * img2 + beta), 0, 255))
# 创建窗口
cv2.namedWindow('image')
cv2.createTrackbar('Alpha', 'image', 0, 300, updateAlpha)
cv2.createTrackbar('Beta', 'image', 0, 255, updateBeta)
# 设置默认值
cv2.setTrackbarPos('Alpha', 'image', 100)
cv2.setTrackbarPos('Beta', 'image', 10)
while (True):
cv2.imshow('image', img)
if cv2.waitKey(1) == ord('q'):
break
cv2.destroyAllWindows()
效果
例子
import cv2
# 图像膨胀
def img_dilated(d):
# 定义 kernel
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (d, d))
# 图像膨胀
dilated = cv2.dilate(img, kernel)
cv2.imshow("myImg", dilated)
img = cv2.imread('2.jpg')
cv2.namedWindow('myImg')
cv2.createTrackbar('d', 'myImg', 1, 30, img_dilated)
while (1):
k = cv2.waitKey(1) & 0xFF
#按ESC键退出
if k == 27:
break
d = cv2.getTrackbarPos('d', 'myImg')
cv2.destroyAllWindows()
效果
举例(效果最好):
import cv2
import numpy as np
# 图像膨胀函数
def img_dilated(img,d):
# 定义 kernel
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (d, d))
# 图像膨胀
dilated = cv2.dilate(img, kernel)
# 返回膨胀图片
return dilated
# 回调函数,因为只能传一个参数,不方便,所以pass
def nothing(pos):
pass
#读取图片
img = cv2.imread("2.jpg",1)
# 创建老窗口
cv2.namedWindow('OldImg')
# 绑定老窗口和滑动条(滑动条的数值)
cv2.createTrackbar('D', 'OldImg', 1, 30, nothing)
while True:
# 提取滑动条的数值d
d = cv2.getTrackbarPos('D', 'OldImg')
# 滑动条数字传入函数img_dilated中,并且调用函数img_dilated
dilated = img_dilated(img, d)
# 绑定 img 和 dilated
result = np.hstack([img,dilated])
cv2.imshow('OldImg', result)
# 设置推出键
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 关闭窗口
cv2.destroyAllWindows()
效果:
可以比较新老图片