2017-10-11 3 views
0

J'ai essayé d'avoir une fenêtre simple avec un trackbar fixant le seuil pour la binarisation.
J'ai vu plusieurs exemples en utilisant la méthode getTrackbarPos de la trackbar dans une boucle while, mais pas beaucoup en utilisant une fonction de rappel, que je voudrais utiliser (ou au moins comprendre pourquoi getTrackbarPos est mieux)
Je vois en fait le seuil image lorsque je déplace le curseur, mais il est presque instantanément remplacé par l'image originale. J'ai également essayé d'utiliser un global ImageBin dans la fonction de rappel, mais cela n'aide pas. Quelqu'un a une suggestion ou peut me rediriger vers un problème similaire? MerciRappel de la barre de suivi python openCV

import cv2 

# callback function 
def Update(value): 
    print value 
    ret,ImageBin = cv2.threshold(Image,value,255,cv2.THRESH_BINARY) 
    cv2.imshow('Fenetre',ImageBin) 

# window 
cv2.namedWindow('Fenetre',cv2.WINDOW_GUI_NORMAL) 

# Trackbar 
Slider = cv2.createTrackbar('Threshold','Fenetre',0,255,Update) 

# Open image 
Home = r'C:\Users\Laurent Thomas\Documents\DataSet\170922110941_BISCHOFF_DORSAL_2ndGO' 
Image = cv2.imread(Home + '\WE00001---A001--PO01--LO001--CO6--SL001--PX32500--PW0040--IN0020--TM245--X014262--Y011163--Z216816--T1373979007.tif',0) 

# Initialise first view as the normal image 
ImageBin = Image[:] 


while(1): 
    cv2.imshow('Fenetre',ImageBin) 
    k = cv2.waitKey(1) & 0xFF 
    if k == 27: 
     break 


cv2.destroyAllWindows() 

Répondre

0

Modifier la fonction Update comme suit:

# callback function 
def Update(value): 
    global ImageBin 
    print (value) 
    ret,ImageBin = cv2.threshold(Image,value,255,cv2.THRESH_BINARY) 
+0

D'accord, cela a fonctionné grâce. c'est bizarre que je l'ai fait hier et ça ne marchait pas. Peut-être que certains ont abandonné et relancé le besoin ou une variable qui était encore en mémoire ... Qui sait – Jindil