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

效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fFhHi5jJ-1570691805424)(C:\Users\xiahuadong\Pictures\博客\35.png)]

例子

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

效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s0XWeAVD-1570695229592)(C:\Users\xiahuadong\Pictures\博客\37.png)]

举例(效果最好):

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

效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7rGKxAJB-1570697580468)(C:\Users\xiahuadong\Pictures\博客\38.png)]
可以比较新老图片

  • 34
    点赞
  • 138
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏华东的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值