[PYTHON] Konvertieren Sie Bilder aus dem FlyCapture SDK in ein Formular, das mit openCV verwendet werden kann

Einführung

FlyCapture SDK

Dies ist ein spezielles SDK für die Handhabung von Point Grey CCD-Kameras, die häufig in der Forschung verwendet werden. Da die Kamera nicht über "openCV" geöffnet werden kann, muss sie in "Mat type" konvertiert werden, wenn Sie sie verarbeiten möchten. Die Plattform ist

Die Sprache ist

Wird unterstützt.

Laden Sie das SDK hier herunter [https://www.ptgrey.com/flycapture-sdk](Registrierung erforderlich) Es gibt auch eine offizielle Referenz in PDF, aber leider in Englisch.

Zu verwendende Sprache

Dieses Mal werden wir uns mit der Konvertierung in C ++ und Python befassen. Ich kann andere Sprachen nicht erklären, weil ich sie überhaupt nicht berührt habe, aber ich denke, dass die Dinge, die zu tun sind, fast die gleichen sind.

Auch dieses Mal verwenden wir opencv3.10.

C++

VisualStudio2015 wird verwendet und die Umgebungskonstruktion wird weggelassen.


	Error error;
	BusManager busMgr;
	unsigned int numCameras;
	PGRGuid guid;
	Camera cam;
	Image rawImage, convertedImage;
	IplImage *cv_image;
	cv::Mat imgSub;
	cv::Rect rect;


    //=====================
    //Kamera starten
    //=====================

	error = busMgr.GetNumOfCameras(&numCameras);
	if (error != PGRERROR_OK) {
		error.PrintErrorTrace();
		return -1;
	}

	printf("Number of cameras detected: %u\n", numCameras);
	if (numCameras != 1)
		return -1;

	error = busMgr.GetCameraFromIndex(0, &guid);
	if (error != PGRERROR_OK) {
		error.PrintErrorTrace();
		return -1;
	}

	error = cam.Connect(&guid);
	if (error != PGRERROR_OK) {
		error.PrintErrorTrace();
		return -1;
	}

	error = cam.StartCapture();
	if (error != PGRERROR_OK) {
		error.PrintErrorTrace();
		return -1;
	}

	error = cam.RetrieveBuffer(&rawImage);
	if (error != PGRERROR_OK) {
		error.PrintErrorTrace();
		return -1;
	}

	error = cam.RetrieveBuffer(&rawImage);
	if (error != PGRERROR_OK) {
		error.PrintErrorTrace();
		return -1;
	}


    //=====================
    //  Image => cv::Mat
    //=====================


    cv::Mat writer_img(h, w, CV_8UC3, convertedImage.GetData());

    ////In meiner Umgebung steht es auf dem Kopf, fügen Sie also die folgende Zeile hinzu
    //cv:Flip(writer_img, writer_img);

In den Kommentaren wies yumetodo auf den Code hin und änderte ihn. Die Operation wurde ebenfalls bestätigt.

Es hat funktioniert, wenn ich die Umgebung neu erstellt habe, um den Betrieb zu überprüfen, aber aus irgendeinem Grund hat es in meiner Umgebung nicht funktioniert. Wenn Sie ähnliche Symptome haben, lesen Sie bitte den Code vor der Änderung.


    //=====================
    //  Image => cv::Mat
    //=====================

    //Konvertieren Sie das Kamerabild in IplImage
    error = rawImage.Convert(PIXEL_FORMAT_BGR, &convertedImage);
    if (error != PGRERROR_OK) {
        error.PrintErrorTrace();
        return -1;
    }

   //Ziel-Lebenslauf kopieren_Bildinitialisierung
    int w = rawImage.GetCols(), h = rawImage.GetRows();
    cv_image = cvCreateImage(cvSize(w, h), IPL_DEPTH_8U, 3);

    // cv_In den Bildspeicher kopieren
    memcpy(cv_image->imageData, convertedImage.GetData(), w * h * 3);

    //In meiner Umgebung steht es auf dem Kopf, fügen Sie also die folgende Zeile hinzu
    //cvFlip(cv_image, cv_image); 

    //Von IplImage nach Mat konvertieren
    cv::Mat writer_img = cv::cvarrToMat(cv_image);

Python

Die verwendete Python-Version ist "3.5.2". Wir haben den Vorgang auf dem 2. System nicht bestätigt, aber da beide Wrapper-Bibliotheken unterstützt werden, denke ich, dass dies ein Referenzlevel sein wird.


import PyCapture2
import cv2

#============================
#Kamera starten
#============================

bus = PyCapture2.BusManager()
cam = PyCapture2.Camera()
uid = bus.getCameraFromIndex(0)
cam.connect(uid)

numCams = bus.getNumOfCameras()
print("Number of cameras detected: ", numCams)
if not numCams:
	print("Insufficient number of cameras. Exiting...")
	exit()

cam.startCapture()


#============================
#Konvertieren Sie in ein Formular, das mit opencv verwendet werden kann
#============================

#Holen Sie sich ein Bild
tmp_image = cam.retrieveBuffer()

#numpy Array(Python OpenCV verwendet Numpy Array)
row_bytes = float(len(tmp_image.getData()))/float(tmp_image.getRows())
cv_image = np.array(tmp_image.getData(), dtype="uint8").reshape((tmp_image.getRows(), tmp_image.getCols()));

#Geben Sie den Farbraum an(Wenn Sie dies nicht tun, erhalten Sie ein graues Bild)
raw_image = cv2.cvtColor(cv_image, cv2.COLOR_BAYER_BG2BGR)

Recommended Posts

Konvertieren Sie Bilder aus dem FlyCapture SDK in ein Formular, das mit openCV verwendet werden kann
Konvertieren Sie aus SpriteUV2 exportierte Netzdaten in ein Format, das von Spine importiert werden kann
Konvertieren Sie Bilder aus dem PIL-Format, die mit Django aus dem Formular gelesen wurden, in das base64-Format
Dateitypen, die mit Go verwendet werden können
Formatieren Sie DataFrame-Daten mit Pytorch in ein Formular, das mit NN trainiert werden kann
So installieren Sie die Python-Bibliothek, die von Pharmaunternehmen verwendet werden kann
Ich wollte schnell einen Mailserver erstellen, der mit postfix + dovecot auf EC2 frei verwendet werden kann
Hinweise zu Python-Kenntnissen, die mit AtCoder verwendet werden können
Ich habe ein Programm erstellt, um Bilder mit Python und OpenCV in ASCII-Grafik umzuwandeln
[Python] Einführung in das WEB-Scraping | Zusammenfassung der Methoden, die mit dem Webdriver verwendet werden können
Ein Mechanismus zum Aufrufen von Ruby-Methoden aus Python, der in 200 Zeilen ausgeführt werden kann
Erstellen Sie eine Web-API, die Bilder mit Django liefern kann
Lassen Sie uns ein Diagramm erstellen, auf das mit IPython geklickt werden kann
[Python3] Code, der verwendet werden kann, wenn Sie die Größe von Bildern Ordner für Ordner ändern möchten
Erstellen Sie mit Selenium ein Programm, mit dem Sie Ihr Lieblingsbild erstellen können
[Python] Erstellen Sie ein Diagramm, das mit Plotly verschoben werden kann
Ich habe versucht, es zu erweitern, damit die Datenbank mit der Analysesoftware von Wiire verwendet werden kann
Erstellen Sie eine Spinbox, die mit Tkinter in Binär angezeigt werden kann
Ein Timer (Ticker), der im Feld verwendet werden kann (kann überall verwendet werden)
Verstehen Sie die Wahrscheinlichkeiten und Statistiken, die für das Fortschrittsmanagement mit einem Python-Programm verwendet werden können
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
Erstellen Sie ein Währungsdiagramm, das mit Plotly (2) verschoben werden kann.
Über die Sache, dass Fackelzusammenfassung wirklich verwendet werden kann, wenn ein Modell mit Pytorch erstellt wird
Vergleich von 4 Stilen, die mit set_context an seaborn übergeben werden können
Erstellen Sie eine Spinbox, die mit Tkinter in HEX angezeigt werden kann
Erstellen Sie ein Währungsdiagramm, das mit Plotly (1) verschoben werden kann.
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
Konvertieren Sie Gesichtsbilder mit PULSE in eine hohe Bildqualität, damit Sie die Poren und die Textur sehen können
Erstellen Sie einen BOT, der mit Discord registrierte Bilder wie Piktogramme aufrufen kann
Ich habe eine generische Python-Projektvorlage erstellt
Akustisches Signalverarbeitungsmodul, das mit Python-Sounddevice ASIO [Anwendung] verwendet werden kann
Wie man einen Janken-Bot macht, der leicht bewegt werden kann (Kommentar)
Erstellen Sie eine Web-App, die mit Plotly Dash einfach visualisiert werden kann
Ich habe einen einfachen Timer erstellt, der vom Terminal aus gestartet werden kann
Python-Sound Gerät ASIO akustisches Signalverarbeitungsmodul [Basic]
Konvertieren Sie mit pdfplumber von PDF in CSV
[Python3] Code, der verwendet werden kann, wenn Sie ein Bild in einer bestimmten Größe ausschneiden möchten
Es scheint, dass alle untergeordneten Bestellungen storniert werden können, um alle übergeordneten Bestellungen (Sonderbestellungen) mit der Bitflyer-API zu stornieren
Wenn Sie eine Windows-App (exe) erstellen möchten, die jetzt nur mit Python verwendet werden kann
Ich möchte eine Prioritätswarteschlange erstellen, die mit Python (2.7) aktualisiert werden kann.
Persönliche Notizen zu Pandas-bezogenen Vorgängen, die in der Praxis verwendet werden können
Ich habe ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann
Ich habe versucht, die Operationen zusammenzufassen, die wahrscheinlich mit numpy-stl verwendet werden
Linux-Befehl (Basic Edition), der ab heute verwendet werden kann, wenn Sie wissen
Kratzmodul "Gaspacho", das einfacher zu verwenden ist als Beautiful Soup
Eine neue Form der App, die mit GitHub funktioniert: So erstellen Sie GitHub-Apps
Bis Sie youtube-dl mit Synology (DS120j) verwenden können
Funktionen, die in der for-Anweisung verwendet werden können
Mit FastAPI können nicht mehrere Bilder aus dem Formular hochgeladen werden
Konvertieren Sie PDFs mit Python in Massenbilder
Spielen Sie den Server mit zwei PCs
Listen Sie Pakete auf, die mit pip aktualisiert werden können
Eine Geschichte, die fehlgeschlagen ist, als versucht wurde, das Suffix mit rstrip aus einem String zu entfernen
Ein Memo, das das Gesicht des mit Djangos OpenCV von der Webkamera aufgenommenen Bilds erkennt und zurückgibt.
Ich habe versucht, eine Memo-App zu erstellen, die Pomodoro sein kann, aber eine Reflexionsaufzeichnung
Aus einem Buch, das der Programmierer lernen kann ... Konvertieren von Zeichen, die Zahlen darstellen, in einen ganzzahligen Typ
So erstellen Sie eine Eigenschaft von Beziehungen, die durch bestimmte Bedingungen vorab abgerufen werden kann
Mit Raspberry Pi erstellter Dateifreigabeserver, der für Remote-Arbeiten verwendet werden kann