Die offizielle Version des Python-Wrappers für das FlyCapture SDK wurde veröffentlicht, daher habe ich versucht, sie zu verwenden. Die Software kann heruntergeladen werden von: (Benutzerregistrierung erforderlich) https://www.ptgrey.com/support/downloads
** Umgebung / Software **
Kamera
Ich möchte das erfasste Bild mit OpenCV verarbeiten. Nachdem Sie es mit PyCapture aufgenommen haben, konvertieren Sie es in ein ~~ Numpy-Array. ~~ Speichern und erneut öffnen! Das geht schneller! !! !!
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, []
#In Numpy-Array konvertieren
# data = np.array(img.getData(), dtype=np.uint8)
# data = data.reshape((img.getRows(), img.getCols()))
#Als Bitmap speichern und mit OpenCV öffnen
img.save('tmp.bmp'.encode("utf-8"), PyCapture2.IMAGE_FILE_FORMAT.BMP)
data = cv2.imread('tmp.bmp', 0)
return True, data
#Geben Sie die erfasste Bildgröße an.
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)
#Kameraeigenschaften einstellen
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)
#Stellen Sie die Einstellungen wieder her
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
Jetzt können Sie sowohl die Point Grey-Kamera als auch cam.read ()
verwenden.
~~ Eigentlich wollte ich die Verschlusszeit usw. angeben, aber ... (Zusatz) Es scheint notwendig zu sein, die Kameraerfassung einmal zu stoppen, um Eigenschaften wie SHUTTER und GAIN zu ändern. Daher wird die Verarbeitung nur ausgeführt, wenn sie in der Spurleiste geändert wird. Sie können die Kameraeigenschaften anzeigen, die festgelegt werden können, indem Sie den an FlyCapture angehängten Standard-Viewer überprüfen.
Recommended Posts