Comment mettre dans un tableau les pixels d'une picturebox ?

cdelory Messages postés 39 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 26 septembre 2012 - 11 mars 2012 à 18:19
cdelory Messages postés 39 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 26 septembre 2012 - 20 mars 2012 à 10:04
Bonjour a tous
Je suis débutant en Vb.net, et je rencontre un probleme avec le traitement d'une image.
J'ai récupéré sur ce site une source pour capturer une image avec ma webcam. J'arrive a enregistrer cette image dans tous les formats( bmp, jpg...), mais pas sous la forme RGB. C'est a dire que quand j'ouvre le fichier de l'image y'a pas de chiffres exploitables.
Comment fait on pour obtenir la valeur RGB de chaque pixel afin de coller ca dans un tableau de pixel ?
PS: Ca fait une semaine que je cherche et je trouve... rien !
Merci pour vos conseils.

33 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 mars 2012 à 07:19
Bon.
De meilleure humeur ce matin et donc plus patient.

1) regarde ce source de Renfield
Tapez le texte de l'url ici.
Il est écrit en VB6, mais parfaitement analysable et transposable en VB.Net
Il te donnera des idées très claires.
2) je te disais plus haut :
explique ceci :

- 0 = pixel different à 60% de difference
- 1 = pixel identique à 10% prés
- 0.5 = pixel semblable à au moins 60 %


en termes/correspondances techniques. Ce sera un bon début, déjà (et te permettra d'y voir plus clair)


en espérant déclencher quelques réflexes. Je l'ai fait sans succès.
Je vais donc m'y prendre autrement : ===>> imagine le cas le plus simple (avant des plus complexes) ===>>> deux images en noir et blanc (donc deux couleurs RGB(0,0,0) et RGB(255,255,255) possibles pour chaque pixel). Que deviennent (dans ce cas pourtant le plus simple) tes pourcentages envisagés ? ===>>> tous = différents de 100 % ou différents de 0%).
Je te laisse continuer la réflexion.
Bonne journée.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cdelory Messages postés 39 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 26 septembre 2012
13 mars 2012 à 13:08
ShayW, j'ai essayé de mixer ton code et le mien. Si je comprends,
arraypixel(row, col) = imagescan.GetPixel(row, col) va chercher la valeur du pixel sur XetY et place cette valeur dans le tableau en XY.
Jusque la mon code ne plante pas. mais je pensais naivement pouvoir afficher cette valeur dans un label... mais ca marche pas.
Deplus, la couleur du pixel a 3 composantes, pourquoi alors le tableau ne peut-il en stocker qu'une ?
Il me manque des infos je pense
Pour ton explication :
on déclare un array de drawing.color

Code Visual Basic : Private tablepixel(,) As Drawing.Coloron déclare une variable de type bitmap
et on appelle la fonction readbitmapIntoArray

Code Visual Basic :Dim mybitmap As New Bitmap(Application.StartupPath & "\image2.jpg")
tablepixel = readbitmapIntoArray(mybitmap)
là je comprends pas non plus car readbitmapIntoArray ne doit pas faire la meme chose que imagescan.GetPixel
Enfin je vais chercher, le plus important là c'est ma premiere question , concernant les 3 composante du pixel, et surtout l'affichage dans un label de ces 3 valeurs...
Si tu peux m'aider encore un ptit coup .

Ucfoutu, je vois que tu cherches toujours a me convaincre de l'inutilité de ma démarche. Je vais essayer d'etre clair sans me facher moi non plus ( tu n'as pas le monopole de l'impatience )... surtout que je ne vais ma justifier pendant des semaines ( tu serais pas plus chiant que ma femme des fois ? ).
Je sais qu'il y a eu des progrés considérable en traitement et analyse d'image, il n'y a qu'a voir les nouvelles consoles de jeux, les centres de tri postaux automatisés, les radars automatiques qui lisent le numéro de plaque, les analyses de flux de personnes...
Je sais aussi qu'il y'a de brillants cerveaux qui ont travaillés toute leur vie à developper ces applications.
En aucun cas je n'espere un jour rivaliser avec tout cela, j'ose meme pas copier leur code car je serais bien inccapable de le faire tourner.

En revanche, rien ne m'interdit de bidouiller, hein ? ca je peux ? j'embete personne ( a part toi visiblement ), que mon approche soit simpliste je veux bien le croire... et alooooors ?

Et pour en revenir, encore une fois sur mes % , je me doute qu'il y a tout une batterie d'exceptions au fonctionnement de mon filtre, deja pour ton exemple du noir et blanc je serais quand meme trés-trés con d'analyser en couleur une image noir et blanc, voir meme monochromatée. Et en admettant que cela devrait ce produire je peux mettre une exception dans mon programme.
Tu me diras qu'il peut y avoir des differences de luminosité ou autre bidules abracadabrantesques ( c'est dure a ecrire ca ), et alooors ? si y'avait pas ca, ca ne serait pas rigolo l'informatique !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 mars 2012 à 13:15
Je cherchais simplement à t'éclairer dans ta démarche (c'est ma manière d'aider réellement).
J'ai reçu un message privé me faisant comprendre que l'essentiel était de te laisser découvrir par toi-même certains aspects.
Celui qui m'a adressé ce message est probablement plus sage que moi. Je te laisse donc faire comme tu l'entends. Tu as eu, pour y parvenir, la communication de deux méthodes de relevé des pixels dans un tableau (une par double boucle, l'autre par une fonction de l'Api de Windows).
Voilà tout. Le reste est maintenant entre tes mains.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
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 mars 2012 à 16:00
imagescan est un parametre de la class Bitmap
et une des methodes de la class Bitmap
est getpixel(x,y)

Deplus, la couleur du pixel a 3 composantes, pourquoi alors le tableau ne peut-il en stocker qu'une ?

chaque entrée du tableau est du type drawing.color
msdn

là je comprends pas non plus car readbitmapIntoArray ne doit pas faire la meme chose que imagescan.GetPixel


tu constates ou tu demandes

readbitmapIntoArray lit l'image du type bitmap
representé par le parametre imagescan
et met la valeur ARVB (alpha, rouge, vert, bleu). de chaque pixel d'imagescan dans un array à deux dimension
si tu veux lire les données dans un listbox
attention si l'image est trop grande tu risque
de manquer de mémoire et arret du programme

Dim mybitmap As New Bitmap(Application.StartupPath & "\image1.jpg")
        tablepixel = readbitmapIntoArray(mybitmap)
        ListBox1.Items.Clear()
        
        For iterrow = 0 To tablepixel.GetLength(0) - 1
            For itercol = 0 To tablepixel.GetLength(1) - 1
                ListBox1.Items.Add("row " & iterrow.ToString & "col " & itercol.ToString & " R = " & tablepixel(iterrow, itercol).R.ToString & " G = " & tablepixel(iterrow, itercol).G.ToString & " B = " & tablepixel(iterrow, itercol).B.ToString)
            Next
        Next
0

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

Posez votre question
cdelory Messages postés 39 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 26 septembre 2012
13 mars 2012 à 19:51
Merci ShayW et Ucfoutu pour toutes ces infos
Vous ne m'en voudrez pas de garder le silence quelques jours.... le temps de comprendre tout ca, de faire mes recherches pour maitriser les readbitmapIntoArray et autres tablepixel.GetLength
Apres cet effort intenseje me reposerai 3-4 jours dans le noir .

Puis je pourrais soumettre mon code à la critique
0
cdelory Messages postés 39 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 26 septembre 2012
18 mars 2012 à 16:21
TaDa !!! me revoila !

Ca maaaaaaaaarche
Voila mon code, sans aucune prétention vu qu'il ne vise qu'a vérifier si j'ai compris toutes les infos que vous m'avez donné, alors inutile de préciser que ce code ne sert strictement à rien d'autre.
Donc le but de mon petit code est de charger une petite image de mon cru en 120x100 px, et d'afficher l'image, ainsi que les composantes du pixel situé à x=1 y=1.
Ceci étant, si j'ai rien pigé ou/et si je transgresse les regles fondamentales de la programmation n'hesitez pas a me le dire ( avec tacte quand meme ucfoutu )

Public Class Form1
    Dim MonImage As Bitmap
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim TailleX As Integer, TailleY As Integer
        MonImage = New Bitmap("C:\Users\Utilisateur\Documents\PERSO\Images Test VB\Mini_image_01.bmp")
        TailleX = MonImage.Width
        TailleY = MonImage.Height
        PBox1.Size = New Size(TailleX, TailleY)
        PBox1.Image = MonImage
        Call ScanPixel()
    End Sub

    Private Sub ScanPixel()
        Dim Val_R As Integer, Val_G As Integer, Val_B As Integer
        Dim TablePixel(1, 1) As Drawing.Color
        TablePixel(1, 1) = MonImage.GetPixel(1, 1)
        Val_R = TablePixel(1, 1).R.ToString
        Val_G = TablePixel(1, 1).G.ToString
        Val_B = TablePixel(1, 1).B.ToString
        Lbl_X.Text = CStr(1)
        Lbl_Y.Text = CStr(1)
        Lbl_R.Text = CStr(Val_R)
        Lbl_G.Text = CStr(Val_G)
        Lbl_B.Text = CStr(Val_B)

    End Sub
End Class



Pour continuer sur la lancé, voici le code que j'ai récupéré et que j'aimerais réutiliser.
http://www.vbfrance.com/codes/CAPTURE-IMAGE-DANS-FLUX-VIDEO-WEBCAM_40449.aspx
Malheureusement, l'aquisition d'image est noyée dans une montagne de codes qui ne m'intéresse pas.
J'ai donc essayé d'élaguer dans le code, mais à chaque fois que j'y touche: plus rien ne marche.
j'ai bien réussi à chunter les combobox mais c'est tout.
Ce que j'aimerais: réduire cette acquisition d'image à une ou 2 procédure, voir éventuellement à une form " secondaire" que j'appellerai au besoin...
Deplus, il y a tout le code pour creer les picturebox et autres bouton: j'ai essayé de le virer pour ( erreur ?) car dans mon vb.net 2008 d'ordinaire ca n'apparait pas. Bref j'ai viré le code, ce qui a eu pour effet de virer les picturebox et les boutons du design , alors j'ai replacer sur le design les boutons et picture box mais le code est revenu aussi ... bref je tourne en rond.

Alors allons-y franco:
Quel est le code le plus basic pour extirper une image d'une web cam ?
0
cdelory Messages postés 39 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 26 septembre 2012
18 mars 2012 à 19:54
A me relire je ne sais pas si je me suis bien exprimé à propos de la webcam, donc je reformule:

Le code dont j'ai mis le lien, est le code qu'on retrouve partout sur le web quand on cherche : "webcam vb.net". Tout le reste est vaguement dérivé de ce même code
Or vu mon niveau, pour appréhender les fonctions qui permettent d'utiliser la webcam il me faudrait un code plus " sobre " avec moins de bidules autour et plus d'explications.
Malheureusement je ne trouve rien sur internet, pas même un tuto ou autre, malgré plusieurs jours de recherches ...
c'est pourquoi je sollicite une fois de plus votre aide.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 mars 2012 à 20:03
Ouais ...
Bien compliqué, tout cela ....
J'en profite pour te saluer, Pingu. Tu sais maintenant ce qu'est la "recherche"
.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
18 mars 2012 à 20:54
Salut

peut etre ici
ici
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
18 mars 2012 à 21:23
ou encore la
la

webcam_picture.zip
File Size: 75 kb
File Type: zip
Download File
0
cdelory Messages postés 39 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 26 septembre 2012
18 mars 2012 à 22:32
Merci ShayW
J'avais déja visité ces liens, les codes ne fonctionnent pas.
En fait il y a des bug, et malgré mes efforts je ne suis pas parvenu a les résoudre... forcément vu mon niveau dans ce domaine... que je découvre.
J'ai trouvé d'autres codes, dérivés de celui dont j'ai mis le lien, mais qui ne marchent pas mieux.

A priori d'aprés ce que j'ai vu, le mieux est d'utiliser directX, et pas de dll. Maintenant j'ai pas trouvé de tuto ( en français ).
Même sur ce site (pourtant bien fourni) les infos sont rares. A croire que tout le mode repompe ce code :
http://www.vbfrance.com/codes/CAPTURE-IMAGE-DANS-FLUX-VIDEO-WEBCAM_40449.aspx
Mais le mec qui a fait ce code, il eu sa source où ?
Bon je retourne dans mes recherches, ai-je précisé que je parlais anglais aussi bien que le vb
0
cdelory Messages postés 39 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 26 septembre 2012
18 mars 2012 à 22:35
pfff , même un lien j'arrive pas a le mettre correctement
0
cdelory Messages postés 39 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 26 septembre 2012
20 mars 2012 à 10:04
Bon j'ai continué mes recherches.
J'ai téléchargé pas mal de codes que j'ai essayé. Les codes ne faisant pas appel à DirectX plantes pratiquement tous. Donc je pense que DirectX est la solution.
J'ai fais des recherches sur ce fameux Directx mais je trouve juste :
- comment utiliser la sourie
- comment mettre du sons...
rien sur la capture d'image, si ce n'est ce foutu même code qui revient toujours.
Il faut bien admmettre que ce code est sans faille, puisqu'il marche impeccablement et ne bug jamais.

Malheureusement je ne le comprends pas. par exemple: à quel moment le "Module ModCap " est appelé ?
0
Rejoignez-nous