在 Opencv Python 中创建多个轨迹栏

Mog*_*bac 2 python opencv trackbar

尝试为 1 个窗口创建 3 个轨迹栏。

我正在拍照。将其转换为灰色。使用非本地意味着模糊它。通过一个称为 bino 的阈值。对其进行边缘检测。使用边缘检测来查找轮廓。按面积对这些轮廓进行排序。只取最大的轮廓。并最好将其显示在精明或阈值图像上。

我需要一个用于同一图像上的 nlm 模糊、阈值和精明线的轨迹栏,但我不知道该怎么做,也无法弄清楚。请你成为我唯一的希望!

import numpy as np
import cv2 as cv

def thresh_callback(val):
    nlm_thresh = val
    bino_thresh = val
    canny_thresh = val

    img = cv.imread('test.jpg')
    imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    nlm = cv.fastNlMeansDenoising(imgray,nlm_thresh,nlm_thresh,11,21)
    bino = cv.adaptiveThreshold(nlm,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,\
                             cv.THRESH_BINARY,bino_thresh,8)
    canny_output = cv.Canny(bino, canny_thresh, canny_thresh * 2)
    _, contours, hierarchy = cv.findContours(canny_output,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)
    cnt = sorted(contours, key=cv.contourArea, reverse=True)
    cnts = cnt[0]
    area = cv.contourArea(cnts)
    print (area)

    drawing = cv.drawContours(img, cnt, 0, (0,255,0), 3)

    cv.imshow('Contours2', canny_output)
    cv.imshow(source_window, drawing)


source_window = 'Source'
cv.namedWindow(source_window)
max_thresh = 255
thresh = 100 # initial threshold
cv.createTrackbar('nlm_thresh:', source_window, thresh, max_thresh, thresh_callback)
cv.createTrackbar('bino_thresh:', source_window, thresh, max_thresh, thresh_callback)
cv.createTrackbar('canny_thresh:', source_window, thresh, max_thresh, thresh_callback)

thresh_callback(thresh)

cv.waitKey(0) & 0xFF  
cv.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

abh*_*eal 6

另一种更简单的方法是忽略传递给 thresh_callback 的参数,并使用getTrackbarPos ()分别获取每个轨迹栏的轨迹栏值

def thresh_callback(val):
    nlm_thresh = cv.getTrackbarPos('nlm_thresh:', source_window)
    bino_thresh = cv.getTrackbarPos('bino_thresh:', source_window)
    canny_thresh = cv.getTrackbarPos('canny_thresh:', source_window)
Run Code Online (Sandbox Code Playgroud)