Partage
  • Partager sur Facebook
  • Partager sur Twitter

OpenCv Problème de boucle FOR

Incompréhension sur l'inaction de mon programme

    23 décembre 2018 à 16:19:18

    import cv2
    import numpy as np
    from statistics import mean
    f = []
    video = cv2.VideoCapture(0)
    def cam():
    	ret, frame = video.read()
    	for i in range(100,500,150):
    		for j in range(100,500,150):
    			cv2.circle (frame, (j,i), 10, (0,0,0), 1)
    	cv2.imshow('retour cam', frame)
    	return frame
    
    def screen():
    	cv2.imwrite('C:\\Dev\\prog\\3\\image\\a.jpg' , cam())
    	img = cv2.imread('C:\\Dev\\prog\\3\\image\\a.jpg',-1)
    	cv2.imshow('image', img)
    	return img
    
    def reg(x,y,cadre,imga):
    	mean_0 = []
    	mean_1 = []
    	mean_2 = []
    	l_t_0 = []
    	l_t_1 = []
    	l_t_2 = []
    	print('h')
    	for a in range(3):
    		print('j')
    		print(cadre)
    		print(x)
    		print(y)
    		for i in range(x - cadre, y + cadre + 1):
    			print('k')
    			for j in range(x - cadre, y + cadre + 1):
    				point = (i,j)
    				print(point)
    				print(imga[point])
    				l_t_0.append(imga[point][0])
    				l_t_1.append(imga[point][1])
    				l_t_2.append(imga[point][2])
    				print('ajout fait')
    	print('done')
    	print(l_t_0)
    	print(l_t_1)
    	print(l_t_2)
    def calibrage(tolérance):
    	o = 0
    	print('tour : ',o)
    	o +=1
    	q = reg(100,100,5,screen())
    	print('tour : ',o)
    	r = reg(250,100,5,screen())
    while 1:
    	cam()
    	key = cv2.waitKey(1)
    	if key == ord('q'):
    		break
    	if key == ord('s'):
    		calibrage(30)
    
    
    video.release()
    cv2.destroyAllWindows()

    Bonjour à tous,

    j'ai un problème avec mon code python que je ne comprend pas.

    Grossissement, mon code affiche un retour caméra avec opencv. Je lui demande après de prendre des photos de ce retour puis de les analyser. Une fonction '' reg() " génère un cadre de point autour d'un point pris en entré par ses coordonnées x,y et 'cadre'pour la taille du cadre de point généré. Pour chaque cadre de point, la fonction va faire une moyenne des valeurs BVR et les return pour les stocker dans des variables, ici nommées q et r, ce qui représente deux cadres. Les nombreux "print" sont juste là pour, en quelque sorte, débugger et voir où vas et où ne vas pas le programme. Le premier appel de fonction "reg" fonctionne très bien (stocké dans "q"), le output m'affiche que le programme est rentré dans toutes les boucles FOR en m'affichant h, j, les trois valeurs de mes variables locales, k,  les différentes générations de points avec leurs coordonnées et leurs valeurs BVR et enfin, les listes remplies par les boucles FOR précédentes. Cependant quand je rappelle la fonction avec des valeurs différentes de point de départ pour une nouvelle génération de cadre et de nouvelles analyses, la fonction reg ne rentre pas dans la première boucle FOR et ne m'affiche que h ,j, mes trois valeurs de variables locales et les listes vides car non remplies par les boucles précédentes. C’est la première fois que quelque chose d'aussi contre-intuitif m'arrive. Au fait, c'est mon premier message sur ce forum, n'hésitez donc à critiquer sa rédaction et merci d'avance pour vos aides ;)

    • Partager sur Facebook
    • Partager sur Twitter
      24 décembre 2018 à 9:49:51

      Quand tu parles de la première boucle for, tu parles bien de la boucle for i in range(x - cadre, y + cadre + 1): ? Si c'est ça, regarde bien les variables :

      • x = 250
      • cadre = 5
      • y = 100

      On a donc :

      • x - cadre = 250 - 5 = 245
      • y + cadre + 1 = 100 + 5 + 1 = 106.

      Tu lui demande donc de compter de 245 à 106 (le pas est, par défaut, de 1)

      • Partager sur Facebook
      • Partager sur Twitter
        23 mars 2019 à 14:52:56

        Ce sujet est assez ancien et j'ai résolu mon problème depuis pas mal de temps maintenant mais je n’ai pas pris le temps de vous remercier pour ça alors merci beaucoup pour le temps que m'avez accorder !

        En vous souhaitant une agréable journée,

        Miradox

        • Partager sur Facebook
        • Partager sur Twitter

        OpenCv Problème de boucle FOR

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown