Пытаюсь создать 3 трекбара для 1 окна.
Я делаю снимок. Покрытие до серого. Использование нелокальных средств, иначе говоря, размытие. Прохождение через порог, называемый бино. Обнаружение края на нем. Использование обнаружения кромок для поиска контуров. Сортировка контуров по площади. Берем только самый большой контур. И отображать его предпочтительно поверх хитрого или порогового изображения.
Мне нужна дорожка для размытия 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()