Możesz to zrobić za pomocą interfejsu API genIcam. genIcam to ogólny interfejs dla kamer (USB, GigE, CameraLink itp.). Składa się z wielu modułów, ale najbardziej interesuje Cię GenTL (warstwa transportowa). Możesz przeczytać więcej na temat dokumentacji GenTL HERE. Aby ułatwić ten proces, zalecamy użycie interfejsu Basler API lub interfejsu API Baumer, które są klientami GenTL (producenci i konsumenci są opisani w dokumentacji GenTL). Użyłem interfejsu API Baumer, ale oba będą działać.
UWAGA: Używam aparatu czarno-białego Baumer HXG20.
RZECZY pobrać i zainstalować
- wizualna eddition Studios Społeczność (użyłem 2015 LINK)
- Baumer GAPI SDK LINK
- OpenCV (tutaj jest tutorial youtube zbudować OpenCV 3 dla C++) HERE
KAMER TESTOWY A Z APARATEM Z URZĄDZENIAM
Warto sprawdzić, czy karta sieciowa (NIC) i kamera GigE działają i bawić się z aparatem, korzystając z programu Eksplorator aparatu. Może być konieczne włączenie pakietów Jumbo na karcie sieciowej. Możesz skonfigurować IP kamery również za pomocą programu IPconfig. Używam ustawienia DHCP, ale możesz też użyć statycznego adresu IP dla kamery i karty sieciowej.
USTAWIENIA VISUAL STUDIOS
kroki do ustawiania zmiennych środowiskowych systemu i konfigurowanie studio wizualne są opisane w Baumer GAPI programistów SDK prowadnicy (rozdział 4), który znajduje się w następującym katalogu
C:\Program Files\Baumer\Baumer GAPI SDK\Docs\Programmers_Guide
Sprawdź, czy masz następujące zmiennej systemowej (w przypadku korzystania z wersji 64 bitowej) lub utworzyć zmienną w razie potrzeby (re do punktu 4.3.1 w przewodniku programisty).
- name =
GENICAM_GENTL64_PATH
- value =
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Bin\x64\
w Visual Studio, utwórz nowy projekt C++ i aktualizuje następujące właściwości (patrz rozdział 4.4.1 w podręczniku programisty).
- C/C++> Ogólne> Dodatkowe Include Directories =
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Dev\C++\Inc
- Linker> Ogólne> dodatkowe katalogi biblioteczne =
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Dev\C++\Lib\x64
- Linker> Wejścia> Dodatkowe Zależności =
bgapi2_genicam.lib
- Build Wydarzenia> Post-Budowa zdarzeń > Wiersz poleceń =
copy "C:\Program Files\Baumer\Baumer GAPI SDK\Components\Bin\x64"\*.* .\
STWÓRZ .cpp plik do Wyświetlany obraz strumień w OpenCV OKNA
Najprostszym sposobem, aby zacząć jest użycie jednego z kodów przykładowych przewidzianych w Baumer GAPI SDK i zmodyfikować go, aby dodać funkcjonalność OpenCV.Przykładowy kod do wykorzystania jest 005_PixelTransformation, który znajduje się tutaj
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Examples\C++\src\0_Common\005_PixelTransformation
Kopiuj i wklej ten plik .cpp do katalogu źródłowego projektu i upewnić się, można zbudować i skompilować. Powinien przechwycić 8 obrazów i wydrukować pierwsze 6 pikseli wartości z pierwszych 6 linii dla każdego obrazu.
Dodaj te #include
oświadczenia do pliku źródłowego .cpp:
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\video\video.hpp>
Dodaj te deklaracje zmiennych na początku main()
funkcji
// OPENCV VARIABLE DECLARATIONS
cv::VideoWriter cvVideoCreator; // Create OpenCV video creator
cv::Mat openCvImage; // create an OpenCV image
cv::String videoFileName = "openCvVideo.avi"; // Define video filename
cv::Size frameSize = cv::Size(2048, 1088); // Define video frame size (frame width x height)
cvVideoCreator.open(videoFileName, CV_FOURCC('D', 'I', 'V', 'X'), 20, frameSize, true); // set the codec type and frame rate
w oryginalnym pliku 005_PixelTransformation.cpp, linia 569 ma pętlę for
, która wykonuje pętlę ponad 8 obrazów, co oznacza for(int i = 0; i < 8; i++)
. Chcemy to zmienić, aby działał nieprzerwanie. Zrobiłem to zmieniając go do while
pętli, który mówi
while (pDataStream->GetIsGrabbing())
ramach naszej nowej while
pętli, nie ma oświadczenie if
, który sprawdza, czy format pikseli jest „Mono” (skala szarości) lub kolor. W oryginalnym pliku zaczyna się od wiersza 619 i kończy na 692. Bezpośrednio po zamknięciu nawiasów instrukcji if
i else
musimy dodać część openCV, aby wyświetlić obrazy w oknie. Dodaj poniższe linie kodu
} // This is the closing brace for the 'else color' statement
// OPEN CV STUFF
openCvImage = cv::Mat(pTransformImage->GetHeight(), pTransformImage->GetWidth(), CV_8U, (int *)pTransformImage->GetBuffer());
// create OpenCV window ----
cv::namedWindow("OpenCV window: Cam", CV_WINDOW_NORMAL);
//display the current image in the window ----
cv::imshow("OpenCV window : Cam", openCvImage);
cv::waitKey(1);
Należy zwrócić uwagę jest format piksela w obiekcie openCvImage
. Mój aparat ma 8-bitowy kod, więc muszę podać CV_8U
. Jeśli twój aparat ma rozdzielczość RGB lub 10-bitową, musisz podać poprawny format (zobacz dokumentację openCV HERE).
można zapoznać się z innymi przykładami regulacji parametrów kamery.
teraz po zbudowaniu i skompilowaniu, powinieneś mieć otwarte okno openCV wyświetlające obrazy z kamery!
KOŃCZY SIĘ WIĘCEJ GŁOSÓW LUDZI !!!! (Miało to dużo czasu, aby dostać pracę tak zaczepić mnie !!!)
możliwe duplikat [OpenCV z kamery sieciowe] (http://stackoverflow.com/questions/712998/opencv-with-network-cameras) – karlphillip
Jest to także możliwe duplikat [OpenCV z GigE Vision Kamery] (http://stackoverflow.com/questions/3345467/opencv-with-gige-vision-cameras). – karlphillip
Dzięki, zauważyłem twoje komentarze po opublikowaniu aktualizacji. Spojrzę na linki. – gpuguy