Как настроить Allta Vision Camera Manta с помощью OpenCV в Visual Studio
У меня есть ноутбук с Windows 10 и гигабитным Ethernet-контроллером Marvell Yukon 88E8072 PCI-E. Я подключил камеру Allied Vision Manta к своему ноутбуку. Я установил Visual Studio 2015, а также установил Allied Vision SDK - Vimba Viewer. Я могу захватывать изображения с помощью интерфейса Vimba Viewer, так что я знаю, что камера работает нормально.
Проблема в том, когда я пытаюсь захватить изображения в Visual Studio. Я скачал пример исходного кода и с помощью этого кода я могу захватить изображение с моей веб-камеры. Это код:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <opencv2\video\video.hpp>
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
using namespace std;
int main(int argc, char* argv[])
{
//cerr << getBuildInformation() << endl;
VideoCapture cap(0); // open the video camera no. 0 - we camera, 1- should be GigE camera?
if (!cap.isOpened()) // if not success, exit program
{
cout << "Cannot open the video cam" << endl;
return -1;
}
double dWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH); //get the width of frames of the video
double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //get the height of frames of the video
cout << "Frame size : " << dWidth << " x " << dHeight << endl;
namedWindow("MyVideo", CV_WINDOW_AUTOSIZE); //create a window called "MyVideo"
while (1)
{
Mat frame;
bool bSuccess = cap.read(frame); // read a new frame from video
if (!bSuccess) //if not success, break loop
{
cout << "Cannot read a frame from video stream" << endl;
break;
}
imshow("MyVideo", frame); //show the frame in "MyVideo" window
if (waitKey(30) == 27) //wait for 'esc' key press for 30ms. If 'esc' key is pressed, break loop
{
cout << "esc key is pressed by user" << endl;
break;
}
}
return 0;
}
Если я изменяю capCapture cap(0) на VideoCapture cap(1), чтобы получить видео с камеры GigE, я получаю сообщение "Не удается открыть видеокамеру", поэтому cap.isOpen() имеет значение false (см. Код выше).
Я предполагаю, что это связано с тем, что драйвер PvAPI не установлен / включен правильно. Когда я бегу:
cerr << getBuildInformation() << endl;
в cmd я вижу под Video I/O есть строка, которая говорит: PvAPI НЕТ!
У меня вопрос, как я могу настроить свою систему так, чтобы она могла захватывать изображения с Allied Vision Camera, модели Manta в Visual Studio?
2 ответа
ТАК ДЛЯ ВСЕХ ИНЖЕНЕРОВ, КОТОРЫЕ ПЫТАЮТСЯ (И НОВЫЕ НРАВИТСЯ МЕНЯ В MACHINE VISION) ИСПОЛЬЗОВАТЬ API-интерфейсы VIMBA VIEWER (C++, C#) для соединения с камерами MANTA, ЭТО КАК ЭТО СДЕЛАНО:
- Установите Visual Studio 2015 отсюда
- Установите отсюда последнюю версию OpenCV и используйте это руководство для правильной установки и настройки OpenCV.
- Подключите камеру Allied Vision (Manta) к вашему компьютеру (на вашем компьютере должен быть контроллер GigE)
- Установите Vimba Viewer SDK отсюда и установите драйверы с помощью программного обеспечения Vimba Viewer Driver. Перезагрузка компьютера.
- Запустите Vimba Viewer и посмотрите, обнаружена ли ваша камера, и сделайте несколько снимков с помощью камеры.
- Закройте Vimba Viewer и запустите Visual Studio. Откройте некоторые примеры API-интерфейсов C++ из папки: ...\Allied Vision\Vimba_2.0\VimbaCPP_Examples . Я предлагаю использовать ListCameras в первый раз. Вы сможете проверить, распознается ли ваша камера VS2015. Если все в порядке, вы должны увидеть параметры камеры в консоли VS.
ВОЗМОЖНЫЕ ПРОБЛЕМЫ, КОТОРЫЕ Я БЫЛ И ИСПРАВЛЯЛ:
- Visual Studio дает сбой при запуске примеров API. ИСПРАВЛЕНИЕ: Закрыть Vimba Viewer
- API C++ ListCameras не находит вашу камеру: FIX: отключить firewal, все антивирусы или добавить исключения в ваших антивирусных программах в ListCameras.exe, Visual Studio 2015 и Vimba Viewer.
Примеры C++ немного сложно отследить, поэтому я вставляю сюда фрагмент кода:
std::string name;
CameraPtrVector cameras;
VmbSystem &system = VmbSystem::GetInstance();
if( VmbErrorSuccess == system.Startup() )
{
if( VmbErrorSuccess == system.GetCameras( cameras ) )
{
for( CameraPtrVector::iterator iter = cameras.begin();
cameras.end() != iter;
++iter )
{
if( VmbErrorSuccess == (*iter)->GetName( name ) )
{
std::cout << name << std::endl;
}
}
}
}
Это можно было бы найти вC:\Program Files\Allied Vision\VimbaX\doc
(это HTML-компилированный «readthedocs») при установке VimbaX SDK с https://www.alliedvision.com/en/products/software/vimba-x-sdk/
Остальная документация поможет вам получить кадры и многое другое.