前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >交互式调整视觉算法参数(一)-图像阈值参数

交互式调整视觉算法参数(一)-图像阈值参数

作者头像
用户9875047
发布2022-12-07 10:20:05
4710
发布2022-12-07 10:20:05
举报
文章被收录于专栏:机器视觉全栈er机器视觉全栈er

目标:

  • • 使用trackbar对阈值的参数进行动态调整,确认较好的阈值参数
  • • 使用交互式方式调参,直观感受算法参数的作用

0.代码效果展示

1.代码详细说明

首先导入需要的库,包括opencv-python库

代码语言:javascript
复制
import cv2 as cv

接下来是trackbar的回调函数,这里什么都不需要做pass就可以了

代码语言:javascript
复制
def nothing(x):
    pass

然后设置一些全局参数,方便对经常改动参数进行修改:

代码语言:javascript
复制
track_win_name = "trackbar window"
pic_path = "wechat.png"

读取图片,并将图片进行灰度化,并给窗口起个名字,方便后面使用:

代码语言:javascript
复制
img = cv.imread(pic_path, 1)
img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.namedWindow(track_win_name)

接下来是代码的重点部分,使用函数cv.crateTrackbar(para1, para2, para3, para4, para5)创建两个trackbar,分别对应阈值的最小值和最大值,其中参数的详尽含义如下:

  • • para1:trackbar前面会显示的名字
  • • para2:trackbar会放到的窗口名字
  • • para3:打开窗口滑块默认的起始位置
  • • para4:该trackbar对应的参数能调节的范围(从0开始),如para4为255,表示该trackbar调参范围为0-255
  • • para5:拖动滑块后的回调函数
代码语言:javascript
复制
# create trackbars for threshold change
cv.createTrackbar('thres_min', track_win_name, 0, 255, nothing)
cv.createTrackbar('thres_max', track_win_name, 255, 255, nothing)

然后是一个while循环,根据滑块的移动动态刷新图像结果,按下esc键退出窗口。

代码语言:javascript
复制
while(1):

    # your code is here

    k = cv.waitKey(1) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()

最后是循环体中的主要代码:

代码语言:javascript
复制
    thres_min = cv.getTrackbarPos('thres_min', track_win_name)
    thres_max = cv.getTrackbarPos('thres_max', track_win_name)
    ret, img_after_interaction = cv.threshold(img, thres_min, thres_max, cv.THRESH_BINARY)
    cv.imshow(track_win_name, img_after_interaction)

读取trackbar当前位置对应的数值,并将其作为参数传入到阈值函数中,然后用opencv显示调整后的图像结果。

2.完整代码

代码语言:javascript
复制
import cv2 as cv

def nothing(x):
    pass

# settings
track_win_name = "trackbar window"
pic_path = "wechat.png"

# read picture
img = cv.imread(pic_path, 1)
img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.namedWindow(track_win_name)

# create trackbars for threshold change
cv.createTrackbar('thres_min', track_win_name, 0, 255, nothing)
cv.createTrackbar('thres_max', track_win_name, 255, 255, nothing)

# dynamic update
while(1):
    # get current positions of four trackbars
    thres_min = cv.getTrackbarPos('thres_min', track_win_name)
    thres_max = cv.getTrackbarPos('thres_max', track_win_name)
    ret, img_after_interaction = cv.threshold(img, thres_min, thres_max, cv.THRESH_BINARY)
    cv.imshow(track_win_name, img_after_interaction)
    k = cv.waitKey(1) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器视觉全栈er 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0.代码效果展示
  • 1.代码详细说明
  • 2.完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档