Demande une aide

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:36
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 18 déc. 2010 à 11:29
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

3 réponses

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
14 déc. 2010 à 10:00
TailleX - 1 et TailleY - 1 dans les boucles de recherchemotif. Si ton tableau compte N éléments, alors la boucle doit aller de 0 à N - 1.

Je n'ai pas testé car je ne pratique pas le VB mais il me semble que l'erreur vient de là ...

Cordialement, Bacterius !
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
14 déc. 2010 à 10:29
Hello,
Je rejoins Bacterius.
je rajouterais une petite chose: attention à la gestion des bords de l'image.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
18 déc. 2010 à 11:29
Bonjour,

Pour une question VB6, merci de poster sur vbfrance dans un thème VB (Pas le bar qui est un thème commun).

[ Déplacé sur vbfrance.com ]
0
Rejoignez-nous