Python Forum

Full Version: for loop problem with opencv
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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
Bonjour! Pardon moi mais j'ecris en anglais parceque mon fracais est inadequate.

The problems appears to stem from x being larger than y on line 53. If the low end of the range is larger than the upper end, the step must be negative.

For example:

# Will not work because the default step is +1
# We cannot add 1 to 200 and end at 100.
for x in range(200,100): 
    print(x) 

# Will print from 200 backwards to 101
for x in range(200,100,-1): 
    print(x)
Off hand, I am not sure how to resolve the issue. The x-axis and y-axis values should be in separate range() calls. Beyond that, I do not understand the objective well enough to provide more. Based on the starting coordinates, how are you determining the destination?