python -opencv 使用滑动条 cv2.createTrackbar,cv2.getTrackbarPos(), cv2.setTrackbarPos

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

效果

python -opencv 使用滑动条 cv2.createTrackbar,cv2.getTrackbarPos(), cv2.setTrackbarPos_第1张图片

例子

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

效果

python -opencv 使用滑动条 cv2.createTrackbar,cv2.getTrackbarPos(), cv2.setTrackbarPos_第2张图片

举例(效果最好):

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

效果:

python -opencv 使用滑动条 cv2.createTrackbar,cv2.getTrackbarPos(), cv2.setTrackbarPos_第3张图片
可以比较新老图片

你可能感兴趣的:(python -opencv 使用滑动条 cv2.createTrackbar,cv2.getTrackbarPos(), cv2.setTrackbarPos)