Erreur sur recherche motif

schweini2409 Messages postés 5 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 14 décembre 2010 - 13 déc. 2010 à 17:38
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 14 déc. 2010 à 21:12
Salut,
Je viens de coder un code pour rechercher la position d'un motif particulier dans un image.
Pourtant, j'ai eu une erreur 6 : depassement du capacite.J'arrive pas à éliminer.
Quelqu'un peut m'aider ?
Merci beaucoup


Voici le code
Le principe c'est je converse l'image vers une matrice binaire (noir 1, blanc 0) Et puis je fais balader la matrice du motif sur la matrice de l'image pour trouver la position ou on a la différence minimum
Dim TailleX, TailleY, TailleX1, TailleY1 As Long
Dim Mat() As Byte
Dim Mat1() As Byte
Dim Mat2() As Byte


'recherche le motif particulier
Private Sub recherchemotif(Mat() As Byte, Mat1() As Byte)
Dim i, j As Integer
Dim S As Integer
Dim Sm, m, n, a, b, k, l As Byte
ReDim Mat2(TailleX, TailleY) As Byte

Sm = 1000
i = 0
j = 0
S = 0
While (i < 50)
    While (j < 50)
    k = i
    l = j
         For m = 0 To TailleX
             For n = 0 To TailleY
             Mat2(m, n) = Mat1(k, l) - Mat(m, n)
             l = l + 1
            Next n
        k = k + 1
        l = j
        Next m
        
       For m = 0 To TailleX
        For n = 0 To TailleY
            S = S + Mat2(m, n)
        Next n
       Next m
       
   If (S < Sm) Then
    a = i
    b = j
    S = Sm
    Else: S = 0
    End If
    j = j + 1
    Wend
    i = i + 1
    j = 0
Wend
End Sub

Private Sub Command1_Click()
Call recherchemotif(Mat(), Mat1())
End Sub

Private Sub Form_Load()
    Picture1.Picture = LoadPicture("C:\Users\Tu Be\Desktop\PROJET INFO\Images-test\positioneur.bmp")
    Picture2.Picture = LoadPicture("C:\Users\Tu Be\Desktop\PROJET INFO\Images-test\test.bmp")
    TailleX = Picture1.Width
    TailleY = Picture1.Height
    TailleX1 = Picture2.Width
    TailleY1 = Picture2.Height
    Call ConverseMatrix(Picture1, Mat())
    Call ConverseMatrix(Picture2, Mat1())
End Sub

'image vers matrice
Private Sub ConverseMatrix(Picture As PictureBox, Mat() As Byte)
Dim i, j, m, n As Long
ReDim Mat(TailleX, TailleY) As Byte
m = 0
n = 0
For i = 1 To TailleX
    For j = 1 To TailleY
    If Picture.Point(j, i) = RGB(0, 0, 0) Then
    Mat(m, n) = 0
    Else: Mat(m, n) = 1
    End If
    n = n + 1
    Next j
m = m + 1
n = 0
Next i
End Sub

9 réponses

lediablo Messages postés 214 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 2 août 2012
13 déc. 2010 à 17:46
salut
l'erreur est sur quel ligne ?


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
13 déc. 2010 à 21:40
Bonsoir
dans ta sub recherchemotif
tu as déclarer l as byte
Dim Sm, m, n, a, b, k, l As Byte

byte varie de 0 à 255
l = l + 1 donc après 255 runtime error 6
déclare as integer
Dim Sm, m, n, a, b, k, l As integer
et en plus
For m = 0 To TailleX
la aussi la meme erreur quand m atteindra 255
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
13 déc. 2010 à 21:50
ce n'est pas tout
sub recherchemotif
à la ligne Mat2(m, n) = Mat1(k, l) - Mat(m, n)
il se peut que Mat1(k, l) - Mat(m, n) = -1
et erreur comme mat2 et defini comme byte ne peut pas recevoir -1
à toi de jouer
0
schweini2409 Messages postés 5 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 14 décembre 2010
13 déc. 2010 à 22:10
Bonsoir,
J'ai déjà déclaré Sm, m, n, a, b, k, l as integer et j'ai aussi changé le type de Mat2 à Long au lieu de Byte.
Mais c'est toujours runtime error 6 :deplacement capacite.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
13 déc. 2010 à 23:30
ce n'est pas seulement mat2 qu'il faut changer
je teste ton code
après avoir changer mat2 mat1 et math as long
j'ai une autre nouvelle erreur runtime error 9
à la ligne Mat2(m, n) = Mat1(k, l) - Mat(m, n)
subscript out of range
il faut que tu revois ta sub
0
schweini2409 Messages postés 5 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 14 décembre 2010
14 déc. 2010 à 20:16
j'ai vraiment pas compris.
J'arrive pas à compiler ce truc.
Quelqu'1 a une idée ???
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
14 déc. 2010 à 20:35
Salut


j'ai vraiment pas compris.

quoi ?
0
schweini2409 Messages postés 5 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 14 décembre 2010
14 déc. 2010 à 20:39
J'ai déja trouvé l'erreur.
En fait, quand t'as fini le boucle avec j=0 et tu commence le boucle j=1
alors, l=1 aussi..Donc, il y a le moment où n=80 et l=81 donc ca marche pas Parce que le taille du matrice est 80x80.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
14 déc. 2010 à 21:12
C'est possible
IL y a peut etre encore d'autre erreurs
J'ai essayé de comprendre la sub recherchemotif
mais comme tu n'as pas commenté....je n'ai pas
compris

Sm = 1000
pourquoi 1000
et pour le reste aussi
While (i < 50)
pourquoi 50
0
Rejoignez-nous