Étape 4: 1er programme de traitement
Dans la première esquisse de traitement, nous allons regarder ce qui est de voir la webcam et extraire tous les pixels rouges au-dessus d’un seuil et enregistrez-les sur une autre image comme des pixels blancs. Puis nous allons ranger il vers le haut un peu et la fin avec un profil en pointillé blanc mince de l’objet scanné. Nous puis enregistrez ces coordonnées XY de pixel blanc vers un fichier texte avec l’angle moteur à chaque image.
Encore une fois, vous pouvez juste regarder la partie 3 de la série de vidéos ou de regarder à travers les commentaires dans l’esquisse, mais je vais décrire ce qui se passe ici.
Encore une fois, je vais sauter au bit important (boucle de dessin). Alors tout d’abord, nous devons créer deux images qui ont la même taille que la webcam se nourrissent, 640 x 480. Définir l’arrière-plan noir.
Maintenant nous avons besoin d’imprimer l’angle moteur jusqu'à l’angle moteur dans le fichier texte, sauf que nous n’avons pas de l’Arduino encore lu ? C’est bien parce que nous le connaissons a zéro pour commencer et tour la prochaine fois que nous aurons lu ! Il faut faire cette façon d’écrire une charge de caractères chinois dans le fichier texte... MAIS avant de nous écrire sous cet angle, il faut faire précéder avec «; ». C’est donc le prochain programme de traitement sait il traite avec une nouvelle image de la webcam quand il voit un «; ».
Ensuite, nous avons besoin de vérifier pour voir si une nouvelle image de la webcam est disponible, s’il y a alors nous l’avons lu ! Cela enregistre une image de la webcam à l’objet vidéo et nous pouvons obtenir des valeurs en pixels individuelles à l’aide de video.pixels[i] où « je » est le nombre de pixels de haut à gauche le long du côté droit de l’écran et vers le bas. Donc, cela commence à 0 et va jusqu'à 640 * 480 = 307200.
Ici, nous lisons du port série à lire l’angle moteur de l’Arduino. Tout d’abord, nous vérifions pour voir que s’il y a quatre ou plusieurs octets dans le tampon de la série, un flotteur est quatre octets, donc nous devons attendre jusqu'à ce que le flotteur entier est prêt à lire. Ensuite, nous lisons les données entrantes jusqu'à ce que nous a frappé une nouvelle ligne et enregistrez-le sous forme de chaîne. Après cela, nous devons convertir en un flotteur et enregistrez-le à « motangle », mais juste avant, vérifier pour voir si « myString » enregistré en fait n’importe quoi.
Foret de l’amusement. Créer une boucle qui se répète une fois pour chaque pixel sur la webcam. Vérifier si le pixel actuel a une valeur rouge qui dépasse une certaine valeur de seuil. Ici, vous déterminez la sensibilité du scanner. Inférieur au seuil (aussi bas que 1) plus sensibles le scan, utilisé pour les scènes très sombres où la lumière du laser est très faible, éteint toutes les lumières pour cela. Un seuil plus élevé peut être utilisé lorsqu’il y a autre lumière dans la scène (garder un minimum bien) et que vous souhaitez uniquement la ligne lumineuse pour être choisi. DONC ! Si le rouge est supérieure à cette valeur, puis vous placez un pixel blanc à la même coordonnée pixel dans l’image 1. Cela donne une image noir et blanc où les bits rouges sont blancs et tout le reste est noir.
Si nous avons utilisé cette image dans le programme 3D, il serait presque certainement crash. C’est beaucoup trop de points de données. Il donnerait également un état de surface très épais à tout parce que la ligne est floue et large.
Pour résoudre ce problème, faites une autre boucle identique à la précédente pour la boucle. Ensuite, faire un certain temps boucle dans cette boucle. La boucle while ne s’exécute lorsqu’il croise un pixel blanc dans l’image 1 et c’est toujours dans l’image, et si c’est sur une ligne qui est divisible par 5. Ce dernier morceau nous donne la partie en pointillés, vous devrez utiliser le modulo fonction pour ce faire. Le numéro vous utilisez volonté déterminer la résolution verticale de l’analyse. Regardez la vidéo pour une meilleure explication de cela.
Donc dans cette boucle while, tout ce que nous faisons est compte vers le haut à l’aide de « k » (et « i » ainsi parce que la pour la boucle n’est pas avoir une chance de le faire). Donc cette boucle se répète tant que c’est dans une rangée de pixels blancs dans l’image 1, donc « k » est compter combien sont dans une rangée. Une fois qu’il frappe un pixel noir encore une fois, il saute hors de la boucle et laisse tomber un pixel blanc dans l’image 2 dans le milieu de cette ligne qu'il traversait juste.
Ensuite, vous devez avoir besoin d’imprimer les coordonnées X et Y de ce nouveau pixel blanc au fichier texte ! N’oubliez pas de séparer les coordonnées avec un «, » si la prochaine esquisse sait quels sont les composants. Pour imprimer l’abscisse, nous devons utiliser le modulo fonction encore une fois, cela nous donnera la colonne que le pixel est sur (je % 640). Et pour la coordonnée Y il faut trouver la ligne, c’est, cela simplement en divisant le nombre de pixels de la largeur (je / 640). Cela arrondit la réponse qui est parfaite car il nous donne la ligne exacte ses sur !
Ensuite, nous pouvons imprimer les images à notre fenêtre de rendu pour voir ce qui se passe. J’ai mis la webcam se nourrissent sur le dessus et image 2 ci-dessous que je puisse voir le résultat final. Pour placer les images, le premier commence à 0,0 (coin supérieur gauche de la fenêtre) et l’image suivante à 0,480 (à mi-chemin vers le bas sur la gauche).
Nous devons ensuite vérifier l’angle moteur et voir si elle envoie le code secret à nous dire d’arrêter l’esquisse. N’oubliez pas que nous envoyer un angle de 500 quand c’est vouloir arrêter, donc nous avons juste vérifier pour savoir s’il existe plus de 450. Si c’est le cas, alors nous vider la mémoire tampon de texte fichier et fermez le fichier et quitter le programme.