Вы можете сделать это с помощью genIcam API. genIcam - это общий интерфейс для камер (USB, GigE, CameraLink и т. д.). Он состоит из нескольких модулей, но мы сосредоточимся на GenTL (транспортном уровне). Дополнительную информацию о документации GenTL можно найти ЗДЕСЬ. Я рекомендую использовать либо Basler API, либо Baumer API, которые являются потребителями GenTL (производители и потребители описаны в документации GenTL). Я использовал API Баумера, но оба должны работать.
ПРИМЕЧАНИЕ. Я использую моно Baumer HXG20.
ЧТО СЛЕДУЕТ ЗАГРУЗИТЬ И УСТАНОВИТЬ
- Редакция сообщества Visual Studios (я использовал LINK 2015 г.)
- Baumer GAPI SDK, ССЫЛКА
- openCV (вот руководство youtube по созданию openCV 3 для c ++) ЗДЕСЬ
ПРОВЕРЬТЕ КАМЕРУ С ПОМОЩЬЮ CAMERA EXPLORER
Хорошо убедиться, что ваша сетевая карта (NIC) и камера работают, и поиграйте в программе Camera Explorer. Возможно, вам потребуется включить Jumbo-пакеты на вашей сетевой карте. Вы также можете настроить IP-адрес камеры с помощью программы IPconfig (DHCP или статический IP-адрес).
НАСТРОЙКА ВИЗУАЛЬНЫХ УЧАСТНИКОВ
Настройка переменных среды и настройка Visual Studios описана в руководстве программиста Baumer GAPI SDK (глава 4), расположенном в следующем каталоге.
C:\Program Files\Baumer\Baumer GAPI SDK\Docs\Programmers_Guide
Убедитесь, что у вас есть следующая системная переменная (при использовании 64-битной версии), или создайте переменную, если необходимо (см. Раздел 4.3.1 в руководстве программиста).
name = GENICAM_GENTL64_PATH
значение = C:\Program Files\Baumer\Baumer GAPI SDK\Components\Bin\x64\
В Visual Studios создайте новый проект C ++ и обновите следующие свойства (см. Раздел 4.4.1 в руководстве программиста).
C / C ++ ›Общие› Дополнительные каталоги включения = C:\Program Files\Baumer\Baumer GAPI SDK\Components\Dev\C++\Inc
Компоновщик ›Общие› Дополнительные каталоги библиотек = C:\Program Files\Baumer\Baumer GAPI SDK\Components\Dev\C++\Lib\x64
Компоновщик ›Ввод› Дополнительные зависимости = bgapi2_genicam.lib
События сборки ›Событие после сборки› Command Line = copy "C:\Program Files\Baumer\Baumer GAPI SDK\Components\Bin\x64"\*.* .\
СОЗДАЙТЕ ФАЙЛ .CPP ДЛЯ ОТОБРАЖЕНИЯ ПОТОКА ИЗОБРАЖЕНИЙ В ОКНЕ OPENCV
Самый простой способ начать - использовать один из примеров кода, предоставленный в Baumer GAPI SDK, и изменить его, чтобы добавить функциональность openCV. Пример кода для использования - 005_PixelTransformation, который находится здесь.
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Examples\C++\src\0_Common\005_PixelTransformation
Скопируйте и вставьте этот файл .cpp в исходный каталог проекта и убедитесь, что его можно собрать и скомпилировать. Он должен захватить 8 изображений и распечатать первые 6 значений пикселей из первых 6 строк для каждого изображения.
Добавьте эти #include
операторы в исходный файл .cpp:
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\video\video.hpp>
Добавьте эти объявления переменных в начало функции main()
// 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
В исходном файле 005_PixelTransformation.cpp в строке 569 есть цикл for
, который перебирает 8 изображений, что означает for(int i = 0; i < 8; i++)
. Мы хотим изменить его, чтобы он работал непрерывно. Я сделал это, изменив его на цикл while
, который говорит
while (pDataStream->GetIsGrabbing())
В нашем новом цикле while
есть оператор if
, который проверяет, является ли формат пикселей «монохромным» (оттенки серого) или цветным. В исходном файле он начинается со строки 619 и заканчивается на 692. Сразу после закрытия скобок операторов if
и else
и перед оператором pImage->Release();
нам нужно добавить часть openCV для отображения изображений в окне. Добавьте следующие строки кода
} // 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);
Следует отметить формат пикселей в объекте openCvImage
. Моя камера моно 8-битная, поэтому мне нужно указать CV_8U
. Если ваша камера RGB или 10-битных пикселей, вам необходимо указать правильный формат (см. Документацию openCV ЗДЕСЬ).
вы можете обратиться к другим примерам настройки параметров камеры.
теперь после сборки и компиляции у вас должно быть открыто окно openCV, в котором отображаются изображения с камеры!
ПАЛЬЦЫ ВВЕРХ!!!!
person
mark jay
schedule
28.12.2016