La version officielle du wrapper Python pour le SDK FlyCapture a été publiée, j'ai donc essayé de l'utiliser. Le logiciel peut être téléchargé depuis: (Inscription de l'utilisateur requise) https://www.ptgrey.com/support/downloads
** Environnement / Logiciel **
caméra
Je veux traiter l'image acquise avec OpenCV, donc après l'avoir capturée avec PyCapture, convertissez-la en un tableau ~~ Numpy. ~~ Enregistrez et rouvrez! C'est plus rapide! !! !!
capture.py
# -*- coding: utf-8 -*-
import os
import cv2
import numpy as np
import PyCapture2
# set Camera
bus = PyCapture2.BusManager()
cam = PyCapture2.Camera()
uid = bus.getCameraFromIndex(0)
cam.connect(uid)
def capIm():
try:
img = cam.retrieveBuffer()
except PyCapture2.Fc2error as fc2Err:
print("Error retrieving buffer :", fc2Err)
return False, []
#Convertir en tableau Numpy
# data = np.array(img.getData(), dtype=np.uint8)
# data = data.reshape((img.getRows(), img.getCols()))
#Enregistrer en tant que Bitmap et ouvrir avec OpenCV
img.save('tmp.bmp'.encode("utf-8"), PyCapture2.IMAGE_FILE_FORMAT.BMP)
data = cv2.imread('tmp.bmp', 0)
return True, data
#Spécifiez la taille de l'image acquise.
width, height = 2048, 2048
fmt7info, supported = cam.getFormat7Info(0)
offsetX = int((fmt7info.maxWidth-width)/2)
offsetY = int((fmt7info.maxHeight-height)/2)
pxfmt = PyCapture2.PIXEL_FORMAT.RAW8
fmt7imgSet = PyCapture2.Format7ImageSettings(0, offsetX, offsetY, width, height, pxfmt)
fmt7pktInf, isValid = cam.validateFormat7Settings(fmt7imgSet)
cam.setFormat7ConfigurationPacket(fmt7pktInf.recommendedBytesPerPacket, fmt7imgSet)
#Définition des propriétés de la caméra
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.AUTO_EXPOSURE, autoManualMode = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHARPNESS, autoManualMode = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHUTTER, autoManualMode = False)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.GAIN, autoManualMode = False)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.FRAME_RATE, autoManualMode = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.AUTO_EXPOSURE, onOff = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.FRAME_RATE, onOff = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.GAMMA, onOff = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHARPNESS, onOff = False)
SHUTTER, GAIN = 500, 100
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHUTTER, absValue = SHUTTER/40)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.GAIN, absValue = GAIN/20)
cam.startCapture()
def nothing(x):
pass
cv2.namedWindow('PyCapImg', cv2.WINDOW_GUI_NORMAL)
cv2.resizeWindow('PyCapImg', 500,550)
cv2.createTrackbar('SHUTTER', 'PyCapImg', SHUTTER, 1000, nothing)
cv2.createTrackbar('GAIN', 'PyCapImg', GAIN, 1000, nothing)
while cv2.waitKey(1)&0xFF != 27:
ret, im = capIm()
if not ret:
break
ret = cv2.getTrackbarPos('SHUTTER', 'PyCapImg')
if ret/40 != SHUTTER:
SHUTTER = ret
cam.stopCapture()
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHUTTER, absValue = SHUTTER/40)
cam.startCapture()
ret = cv2.getTrackbarPos('GAIN', 'PyCapImg')
if ret/20 != GAIN:
GAIN = ret
cam.stopCapture()
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.GAIN, absValue = GAIN/20)
cam.startCapture()
sh = cam.getProperty(PyCapture2.PROPERTY_TYPE.SHUTTER)
ga = cam.getProperty(PyCapture2.PROPERTY_TYPE.GAIN)
cv2.displayOverlay('PyCapImg', 'SHUTTER:{:.2f}, GAIN:{:.2f}'.format(sh.absValue, ga.absValue))
cv2.imshow('PyCapImg', im)
#Restaurer les paramètres
cam.stopCapture()
fmt7imgSet = PyCapture2.Format7ImageSettings(0, 0, 0, fmt7info.maxWidth, fmt7info.maxHeight, pxfmt)
fmt7pktInf, isValid = cam.validateFormat7Settings(fmt7imgSet)
cam.setFormat7ConfigurationPacket(fmt7pktInf.recommendedBytesPerPacket, fmt7imgSet)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHUTTER, autoManualMode = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.GAIN, autoManualMode = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHARPNESS, onOff = True)
cam.disconnect()
cv2.destroyAllWindows()
try:
os.remove('tmp.bmp')
except:
pass
Vous pouvez maintenant utiliser la caméra Point Gray ainsi que cam.read ()
.
~~ En fait, je voulais spécifier la vitesse d'obturation, etc., mais ... (Une addition) Il semble qu'il soit nécessaire d'arrêter une fois la capture de la caméra pour modifier les propriétés telles que SHUTTER et GAIN, de sorte que le traitement n'est effectué que lorsqu'il est modifié sur la barre de piste. Vous pouvez voir les propriétés de la caméra qui peuvent être définies en vérifiant le visualiseur standard associé à FlyCapture.
Recommended Posts