Utilisez VideoCapture d'OpenCV pour ajuster les paramètres de mise au point de la caméra USB

1. Présentation du problème

        Nous pouvons choisir d'acheter des caméras USB comme dispositifs d'acquisition avant d'effectuer des tâches d'acquisition d'images de vision industrielle. Et certaines caméras USB ont la fonction de mise au point automatique, ouvrez la caméra fournie avec Windows, l'interface est la suivante :

         Une fois la caméra avec fonction de réglage de la mise au point connectée, un bouton de mise au point apparaîtra à l'extrême gauche (le cadre rouge a été encerclé), cliquez sur le bouton et faites glisser la barre coulissante verticale pour régler la position de mise au point de la caméra jusqu'à ce que la caméra soit connectée. position la plus claire que nous voulons ; Vous pouvez également abaisser la barre coulissante vers le bas, ce qui est la stratégie de mise au point automatique, et la caméra se mettra automatiquement au point en fonction de la résolution actuelle de l'image.

        Les opérations ci-dessus sont très simples dans l'application de caméra système Windows, mais pour une certaine tâche de vision industrielle, nous espérons souvent utiliser la programmation de la bibliothèque OpenCV pour implémenter des commandes de mise au point manuelle ou automatique.

2. Résolution de problèmes

        Ici, nous utilisons opencv-python, et il n'est pas difficile pour les étudiants qui utilisent C++ de trouver les fonctions correspondantes. Tout d’abord, nous créons une classe de caméra Camera, instancions un self.stream avec cv2.VideoCapture dans la classe, puis utilisons la méthode set de self.stream pour définir les propriétés de la caméra.

class Camera:
    def __init__(self, src=0):
        self.src = src
        self.stream = cv2.VideoCapture(src, cv2.CAP_MSMF)
        if self.stream.isOpened():
            # (2592,1944)此处根据自己相机的像素值进行修改
            self.stream.set(cv2.CAP_PROP_FRAME_WIDTH, 2592)
            self.stream.set(cv2.CAP_PROP_FRAME_HEIGHT, 1944)
            self.stream.set(cv2.CAP_PROP_FOCUS,500) # 此处即为修改相机对焦参数的命令
        else:
            self.stream = cv2.VideoCapture(self.src + 1)
            self.stream.set(cv2.CAP_PROP_FRAME_WIDTH, 2592)
            self.stream.set(cv2.CAP_PROP_FRAME_HEIGHT, 1944)
            self.stream.set(cv2.CAP_PROP_FOCUS,500)

        Comme vous pouvez le voir dans le code ci-dessus, nous utilisons self.stream.set(cv2.CAP_PROP_FOCUS, 500) pour modifier la position de mise au point de la caméra. En consultant les données et les expériences, on constate que la plage de valeurs de ce paramètre est 0-1023 , qui représente la position de mise au point de la caméra de près à loin, et 1023 représente la mise au point à l'infini.

        Laissez la caméra se mettre au point automatiquement, la méthode est également relativement simple, il suffit de définir (cv2.CAP_PROP_AUTOFOCUS, 1), où la valeur est 1, ce qui signifie que la mise au point automatique est activée et la valeur est 0, ce qui signifie que la mise au point automatique est désactivée. . le code s'affiche comme ci-dessous :

self.stream.set(cv2.CAP_PROP_AUTOFOCUS, 1)

3. Questions nécessitant une attention particulière

        En utilisant la méthode ci-dessus, vous pouvez réaliser la mise au point automatique et la mise au point manuelle de la caméra USB. Mais il convient de noter que la méthode de réglage de la mise au point n'est applicable et efficace que sur les appareils photo dotés d'une fonction de réglage de la mise au point. La méthode définie ci-dessus renverra True une fois l'appel réussi. Si l' objectif à mise au point fixe ne peut pas être appelé avec succès, utilisez la méthode définie. pour ajuster le focus et renvoyer False .

Je suppose que tu aimes

Origine blog.csdn.net/m0_57315535/article/details/130192451
conseillé
Classement