Trying to create 3 trackbars for 1 window.
Im taking an image. Coverting it to gray. Using non local means aka blurring it. Passing it thru a threshold called bino. Doing an edge detection on it. Using the edge detection to find contours. Sorting thise contours by area. Taking only the largest contour. And displaying it preferably over the canny or thresholded image.
I need a track bar for the nlm blur, the threshold, and the canny lines all on the same image but I dont know how to do it and cant figure it out. Please your my only hope!
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()