Verwenden Sie eine Point Grey-Kamera mit Python (PyCapture2).

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

Testumgebung

** Umgebung / Software **

Kamera

Bildaufnahme von der 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. im.png

~~ 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.

img.png

Recommended Posts

Verwenden Sie eine Point Grey-Kamera mit Python (PyCapture2).
[Python] Verwenden Sie JSON mit Python
Verwenden Sie Mecab mit Python 3
Verwenden Sie DynamoDB mit Python
Verwenden Sie Python 3.8 mit Anaconda
Verwenden Sie Python mit Docker
Verwenden Sie die Twitter-API mit Python
Kameraerfassung mit Python + OpenCV
Verwenden Sie TUN / TAP mit Python
Verwenden Sie die Unterschall-API mit Python3
Python: So verwenden Sie Async mit
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Verwenden Sie NAIF SPICE TOOL KIT mit Python
Verwenden Sie rospy mit virtualenv in Python3
Verwenden Sie Python in pyenv mit NeoVim
Gesichtserkennung mit Kamera mit opencv3 + python2.7
Verwenden Sie die Windows 10-Sprachsynthese mit Python
Verwenden Sie die Kamerakalibrierungsdatei mit OpenCvSharp4
Verwenden Sie OpenCV mit Python 3 in Window
Verwenden Sie PostgreSQL mit Lambda (Python + psycopg2)
Verwenden Sie smbus mit python3 in einer pyenv-Umgebung
Verwenden Sie DeepL mit Python (für die Artikelübersetzung)
Verwenden Sie den Amazon Simple Notification Service mit Python
[Einführung in Python] Verwenden wir foreach mit Python
Verwenden Sie PIL oder Pillow mit Cygwin Python
Verwenden Sie die Verschlüsselung der Verschlüsselungsbibliothek mit dem Python-Image von Docker
Einzelpixel-Kamera zum Erleben mit Python
Bildaufnahme von der Kamera mit Python + OpenCV
Verwenden Sie Application Insights mit Python 3 (einschließlich Flaschen).
Verwenden von C ++ - Funktionen aus Python mit pybind11
Verwenden Sie den Phantomjs-Webdriver von Selen mit Pythons Unittest
Bis Sie opencv mit Python verwenden können
Verwenden Sie Python und MeCab mit Azure-Funktionen
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Scraping mit Python
Python mit Go
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Ich möchte MATLAB feval mit Python verwenden
Verwenden Sie zusätzliche Python-Pakete mit Serverless Framework (v1.x)
Verwendung von Raspeye Pie Camera Python
Geben Sie die ausführbare Python-Datei an, die mit virtualenv verwendet werden soll
Verwenden Sie vorerst Logger mit Python
Python> Mit Laufzeitargumenten ausführen> Import argparse verwenden
Verwenden Sie mit pyenv mehrere Versionen der Python-Umgebung