Перейти к содержимому
Compvision.ru

L@MER

Пользователи
  • Количество публикаций

    80
  • Зарегистрирован

  • Посещение

  • Days Won

    3

Все публикации пользователя L@MER

  1. USB3Vision+Genicam+OpenCV

    Здравствуйте форумчане! Планирую применить в своей разработке промышленные видеокамеры (JAI GO или BASLER асе) с интерфейсами USB3Vision со стандартом передачи данных GenIcam (см.вложенный PDF файл). Для данных видеокамер производитель предусматривает собственные SDK, так в инструкции для SDK JAI написано: The JAI SDK consists of two APIs (Application Programming Interfaces): 1. Jai_Factory.dll: Windows DLL with “Plain” C-interface and C/C++ header file with all functions and parameter types defined. This makes it possible to use JAI SDK in almost any programming language available for the Windows platform. 2. Jai_FactoryDotNET.dll: Managed Windows DLL (.NET Framework 2.0). This DLL exposes the “Plain” function interface PLUS an “object-oriented” API. The object-oriented API encapsulates the “standard use” of the “plain” C-interface API. Далее там-же описаны примеры интеграции в проекты, написанные на Microsoft Visual Studio 2005 C/C++, С# и т.п. (см.вложенный PDF файл). В проекте своем планирую применить библиотеку OpenCV, так как имею опыт работы с ней и данная библиотека меня всем устраивает. До этого с данной библиотекой создавал приложения, работающие со стандартными вебкамерами по интерфейсу USB2.0. Там все понятно. В данном случае же прошу консультации есть ли возможность подружить видеокамеры, описанные мною выше с OpenCV (связка USB3Vision+Genicam+OpenCV). Есть ли успешно реализованные проекты на основе OpenCV и USB3Vision+GenIcam? Какие возможны подводные камни при получении изображения в OpenCV с таких камер. P.S. Не хотелось бы ошибиться и купить камеру, которую невозможно потом будет привязать к OpenCV, т.к.данные камеры не дешевые. Заранее благодарен за внимание к теме! JAI-SDK-Getting-Started-Guide_revK.pdf genicam_basler.pdf
  2. Скомпилировал. Создал exe. Запустил через командную строку. Программа написала Rotation и т.д. И все. Я так и не понял как она должна определить какие изображения ей склеивать. Поместил картинки в папку с программой. Обозвал их img1 и img2...пофиг. Как оно работает. Прошу пояснений...
  3. Здравствуйте Стоит задача построения профиля объекта (металлические валы и балки)для последующего измерения геометрических размеров. Для реализации системы планируется использование четырех лазеров, обеспечивающих подсветку области интереса и четырех видеокамер, регистрирующих форму профиля. Камеры и лазеры устанавливаются так чтобы охватить все стороны области интереса. В результате получаем четыре изображения с четко обозначенным контуром профиля. Далее данные четыре изображения должны быть совмещены в разрабатываемой программной среде. Полученный контур профиля используется для нахождения геометрических размеров профиля области интереса. Данная система представлена на вложенном рисунке. Таким образом, задача разбивается на несколько этапов: 1. Захват изображения с 4 камер 2. Фильтрация 3. Выделение контура профиля на каждом двухмерном изображении 4. Совмещение полученных контуров на одном двухмерном изображении 5. Вычисления размеров Как осуществить пункты 1,2,3 и 5 при помощи инструментария OpenCV известно. Главный вопрос на который не смог пока найти ответа - как совместить полученные контуры на одном двухмерном изображении. Есть ли в OpenCV функции, которые помогут реализовать такую задачу?
  4. Доброго времени суток. Жизнь заставила вернуться к теме двухлетней давности. На данный момент реализован лабораторный стенд, условный чертеж которого показан на вложенном рисунке. Установка представляет собой два генератора лазерных линий, подсвечивающих с двух сторон профиль детали. Так-же с двух сторон расположены видеокамеры. Положение генераторов лазерных линий и камер, относительно дуг друга фиксировано и известно. Реализован алгоритм фильтрации и выделения лазерного луча. Также реализован алгоритм получения двумерных координат точек оси лазерного луча. Сейчас стоит задача определить пространственные координаты точек лазерной линии, определяющей профиль на детали. Для этого предполагаю использовать метод оптической лазерной триангуляции, предварительно осуществив калибровку камер. Прочел много литературы, но все равно остался ряд вопросов: 1. В OpenCV есть функция cvTriangulatePoints, но она работает только со стерео картинкой. Нет ли готовой функции или кода, позволяющего реализовать триангуляцию такого типа (и соответственно определять расстояние до точек профиля детали, подсвеченных лазерным излучением) по одному изображению, зная положение камеры и источника лазерного излучения? Не хочется изобретать велосипед так сказать. 2. Калибровка камеры по шахматной доске дает хорошие результаты? В OpenCV это наилучший вариант? 3. Какую систему пространственных координат лучше применить? Я планировал привязать начало координат к одному из источников лазерного излучения. Это наилучшее решение?
  5. USB3Vision+Genicam+OpenCV

    В общем, в процессе экспериментов выявлено, что средствами OpenCV одновременно открыть потоки с двух промышленных камер Basler USB3.0 не получается никакими танцами с бубном или без оного. Проблему решил совместив открытие потоков и захват при помощи Basler Pylon SDK (см.код выше) и дальнейшую обработку и вывод на форму средствами OpenCV. При этом открытие потоков и захват реализованы в одном потоке. Попытки вначале распаралелить открытие и захват на два потока привело к конфликтам и ошибкам. Совмещение в одном потоке обеспечило стабильную работу. P.S. Как показала практика при захвате и обработка одного цветного изображений разрешением 2590х1940 13 fps средствами OpenCV отьедает приблизительно 120-130 Мб оперативной памяти. При захвате цветного изображения разрешением 2590х1940 13 fps средствами Basler SDK и обработке средствами OpenCV отъедает только 60-80 Мб оперативной памяти. Загрузка процессора Core i5 в обоих случаях составляет от 85-96%. При этом изображение на форме достаточно плавное. При включении фильтра Гаусса с одним изображением получаю тормоза, с двумя изображениями такого формата и разрешения на форме - супертормоза. Принял решение в дальнейшем перейти на mono8, благо задача позволяет и использовать ROI, т.к. усреднять ВСЕ изображение такого разрешения нецелесообразно с точки зрения использования ресурсов компьютера.
  6. USB3Vision+Genicam+OpenCV

    Вот что подгружает Basler SDK: Basler SDK.txt Вот что подгружает моя прога на OpenCV: OpenCV.txt С ходу посмотрел, что и та и та программы подгружают одинаковые dll от Basler. По dll от данного производителя различие только в двух компонентах, программа от Basler подгружает еще вот это: PylonGUI_MD_VC100.dll pylonGUI Module Basler C:\Program Files\Basler\pylon 4\pylon\bin\x64\PylonGUI_MD_VC100.dll PylonUtility_MD_VC100.dll Их вызов обеспечивается в начале Basler SDK: // Include files to use the PYLON API. #include <pylon/PylonIncludes.h> #include <pylon/PylonGUI.h> // Namespace for using pylon objects. using namespace Pylon; int main(int argc, char* argv[]) { CTlFactory& tlFactory = CTlFactory::GetInstance(); // Get all attached devices and exit application if no device is found. DeviceInfoList_t devices; if (tlFactory.EnumerateDevices(devices) == 0) { throw RUNTIME_EXCEPTION("No camera present."); } // Create an instant camera object with the camera device 0. CInstantCamera camera_1(tlFactory.CreateDevice(devices[0])); CInstantCamera camera_2(tlFactory.CreateDevice(devices[1])); // Start the grabbing camera_1.StartGrabbing(); camera_2.StartGrabbing(); // This smart pointer will receive the grab result data. CGrabResultPtr ptrGrabResult_1; CGrabResultPtr ptrGrabResult_2; while (1) { // Wait for an image and then retrieve it. A timeout of 5000 ms is used. camera_1.RetrieveResult(5000, ptrGrabResult_1, TimeoutHandling_ThrowException); camera_2.RetrieveResult(5000, ptrGrabResult_2, TimeoutHandling_ThrowException); // Display the grabbed image. Pylon::DisplayImage(1, ptrGrabResult_1); Pylon::DisplayImage(2, ptrGrabResult_2); } }
  7. USB3Vision+Genicam+OpenCV

    Windows 7 Professional 64 bit. Пробовал на двух ноутах. На обоих есть пара USB3.0. Та-же картина. USB2.0 камер хоть четыре работают. А из двух подключенных USB3.0 работает только одна. При этом средствами Basler SDK запускаю пару USB3.0 камер совместно на ура.
  8. USB3Vision+Genicam+OpenCV

    Нет, вторую камеру он не открывает вообще. Открывает только VideoCapture cap_1(1). VideoCapture cap_2(2) - не открывает. При этом, провел эксперимент. Подключил встроенную вебкамеру ноута, внешнюю вебкамеру USB2.0 и внешнюю камеру USB3.0 - все ОК. VideoCapture cap_0(0) - встроенная камера ноута VideoCapture cap_1(1) - USB2.0 VideoCapture cap_2(2) - USB3.0 Короче засада именно в параллельной работе USB3.0 камер, точнее в их открытии...
  9. USB3Vision+Genicam+OpenCV

    В проекте используются две камеры USB3.0. Обе висят на одном хост-контроллере на двух USB3.0 портах ноутбука. Открываю видеопоток: VideoCapture cap_1(1); // Открываем камеру (1) VideoCapture cap_2(2); // Открываем камеру (2) При этом в программе видно изображение только одной из камер. Если вместо одной из USB3.0 камер подключаю USB2.0 камеру, то все хорошо - транслируется картинка и с USB3.0 и c USB2.0 камеры. Вначале грешил, что при разрешении в 5МП хост USB3.0 не протягивает две камеры. Так нет, запускаю программу тестовую, что шла с USB3.0 камерами - две картинки с двух камер без тормозов на полном разрешении. Уменьшал разрешение камер - пофиг, через OpenCV все-равно затык...видится только одна. В каком направлении думать? Ощущение что OpenCV не нравится, что они на одном хосте сидят...походу придется внешний хост покупать....Или может у кого похожая ситуация была...кто как решал?
  10. OpenCV две камеры

    По окошку с выбором камер. Была такая-же петрушка - выползало окошка с предложением выбора камер, имеющихся в наличии на компе с Windows 7 64 bit. К этому прилагалась обязательная ошибка при выборе встроенной камеры на ноутбуке. Использовал при этом cvCreateCameraCapture(CV_CAP_ANY). Ничего не помогало. Плюнул на все и использовал класс VideoCapture для подключения к камерам и захвата изображений. При этом все захватывается с любых USB камер, даже промышленных и окошко выбора камер не вываливается.
  11. USB3Vision+Genicam+OpenCV

    Как показала практика BASLER асе с интерфейсами USB3Vision прекрасно находится через VideoCapture cap(). А вот через CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY) нет. Это на заметку!
  12. Ceemple OpenCV distribution for Visual Studio

    На сайте http://opencv.org появилась ссылка на плагин Out of the box OpenCV C++ development plugin for Visual Studio от компании Ceemple: http://opencv.org/ceemple-opencv-distribution-for-visual-studio.html Заявленные плюшки: Features: Pre-compiled OpenCV v3.0 built with CUDA, OpenCL, OpenMP, and IPP Support for Windows 64 bit and Visual Studio 2013 Auto installation of Microsoft Image Watch plugin OpenCV new project wizard 70+ examples of OpenCV and CUDA. Benefits: Start programming using OpenCV immediately within Visual Studio. OpenCV is ready for use, built with complementary libraries. No need for long setups, configurations and adaptation of OpenCVfor Visual Studio. Learn from the numerous code examples provided. Debug with Microsoft Image Watch plugin. Кто-нибуть пробовал пользоваться? По всей видимости очень интересное решение, позволяющее повысить удобство пользования библиотекой OpenCV в VS и обеспечить беспроблемную установку и интеграцию OpenCV3.0 и VS2013.....
  13. Ceemple OpenCV distribution for Visual Studio

    Без проблем установилось и интегрировало OpenCV3.0 в VS2013. Автоматически прописывает пути к lib и inсlude OpenCV при генерации проекта. При генерации формирует основной код, который обеспечивает сборку простейшего проекта с захватом и отображением в отдельном окне. В общем удобно.
  14. Ага, это я уже нашел. Закомментировал часть кода. Присвоил значения - константы. Все прекрасно заработало. Вот кусок кода: void DrawData(IplImage*_frame, CDC*dc) { // RECT r; // Структура RECT содержит координаты четырех углов прямоугольника // dc->GetClipBox(&r); //GetClipBox-cчитывает огpаничивающий пpямоугольник вокpуг текущей области выpезания, r - принимающая структура типа RECT // int width = r.right - r.left; // int height = r.bottom - r.top; int width = 400; int height = 300; IplImage *img = cvCreateImage(cvSize(width, height), _frame->depth, _frame->nChannels); cvResize(_frame, img); Как показывает отладка в структуре r: r.right =0, r.left=0, r.bottom=0, r.top=0 Т.е. dc->GetClipBox(&r) не работает, хотя прописывал Wingdi.h (include Windows.h), подключал напрямую lib c Gdi32.lib. И Gdi32.dll в системе присутствует. Ну и шут с ним, это не критично, главное вывод в Picture Control состоялся! Теперь дело пойдет! Да, немного понаблюдал, утечек памяти в диспетчере задач замечено не было... P.S. Тему можно переименовывать с Вывод видео на форму в visual studio 2008 - 2010 в Вывод видео на форму в visual studio 2008 - 2013 В общем предложенный в методичке способ с небольшой корректировкой пошел на MSVS2013 на Windows7 64bit.
  15. Как ни странно да. Хотя при создании консольного проложения с той-же opencv3.0 эта usb-камера открывалась. Подцепил другую - видит! Но при этом появилось две странности. Первая:работает программа и на форме формируется картинка, далее я открываю какое-нибуть окно, программу или диспетчер задач, как программа моя перестает работать и выводится ошибка: Вторая ерунда:при закрытии программы вылетает ошибка: В компиляторе при отладке (после ошибки при закрытии программы) пишет: Поток 0xd38 завершился с кодом 0 (0x0). Программа "[1540] CVPROF.exe" завершилась с кодом 2 (0x2). Я почитал, народ пишет что такая ошибка может возникать если программу под пользователем с ограниченными правами запускаешь. ПРобовал под Администратором - таже петрушка. Если начинаю отлаживать в целом весь проект, то выдает такое сообщение: Походу ругается на строку кода, где IPlImage....
  16. Закоментировал. Ошибка со ссылкой на assert пропала. Теперь просто программа запускается и сразу появляется окно Windows "Прекращена работа программы"...Камера молчит...
  17. Да, инициализировал. Помогло. Нашел еще пару ошибок. Получилось все как в методичке. Удалось собрать проект. Но при запуске .exe возникли проблемы: 1. При запуске открывается форма. Загорается светодиод камеры (т.е. подключение к камере осуществляется), но при этом на форме лишь серый прямоугольник. После нескольких секунд появляется сообщение (см.рис.1). Закрываю программу. 2. Когда пытаюсь запустить снова, появляется окно выбора камеры (см.рис.2). Выбираю камеру. Жму ОК. 3. Тут же прилетает ошибка (см.рис.3) Строка 289 на которую ссылается окно с ошибкой в следующем участке кода: BOOL CCVPROFDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Добавление пункта "О программе..." в системное меню. // IDM_ABOUTBOX должен быть в пределах системной команды. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Задает значок для этого диалогового окна. Среда делает это автоматически, // если главное окно приложения не является диалоговым SetIcon(m_hIcon, TRUE); // Крупный значок SetIcon(m_hIcon, FALSE); // Мелкий значок // Чтобы каждый раз не обращаться // Освобождаемся в функции закрытия формы cap_dc = m_cap.GetDC(); capture = cvCaptureFromCAM(0); // Создаем поток захвата видео hThread = CreateThread( NULL, 0, InstanceThread, 0, 0, &dwThreadId); assert(capture); return TRUE; // возврат значения TRUE, если фокус не передан элементу управления } т.е. проблема в assert(capture); Что это может быть?
  18. Visual Studio 2013 OpenCV+MFC. Пытаюсь отладить программу (написана согласно методичке). При отладке ругается: 2 IntelliSense: Предупреждение PCH: d:\VISUAL STUDIO PROJECT\CVPROF\CVPROFDlg.cpp 1 1 CVPROF 1 error C4703: используется потенциально неинициализированная локальная переменная-указатель "App" d:\visual studio project\cvprof\cvprofdlg.cpp 251 1 CVPROF Код приведен ниже... // CVPROFDlg.cpp : файл реализации // #include "stdafx.h" #include "CVPROF.h" #include "CVPROFDlg.h" #include "afxdialogex.h" #include "opencv2/opencv.hpp" #ifdef _DEBUG #define new DEBUG_NEW #endif #define WIDTHBYTES(bits) ((((bits) + 31) / 32) * 4) CStatic m_cap; CvCapture*capture; IplImage*frame; CDC*cap_dc; DWORD WINAPI InstanceThread(LPVOID); DWORD dwThreadId = 0; HANDLE hThread = NULL; HBITMAP CreateRGBBitmap(IplImage* _Grab); // Диалоговое окно CAboutDlg используется для описания сведений о приложении class CAboutDlg : public CDialogEx { public: CAboutDlg(); // Данные диалогового окна enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV // Реализация protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // диалоговое окно CCVPROFDlg CCVPROFDlg::CCVPROFDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CCVPROFDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CCVPROFDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_CAP_STATIC, m_cap); } BEGIN_MESSAGE_MAP(CCVPROFDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDOK, &CCVPROFDlg::OnBnClickedOk) ON_WM_CLOSE() END_MESSAGE_MAP() // обработчики сообщений CCVPROFDlg BOOL CCVPROFDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Добавление пункта "О программе..." в системное меню. // IDM_ABOUTBOX должен быть в пределах системной команды. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Задает значок для этого диалогового окна. Среда делает это автоматически, // если главное окно приложения не является диалоговым SetIcon(m_hIcon, TRUE); // Крупный значок SetIcon(m_hIcon, FALSE); // Мелкий значок // TODO: добавьте дополнительную инициализацию return TRUE; // возврат значения TRUE, если фокус не передан элементу управления cap_dc = m_cap.GetDC(); capture = cvCreateCameraCapture(CV_CAP_ANY); hThread = CreateThread( NULL, 0, InstanceThread, 0, 0, &dwThreadId); assert(capture); } void CCVPROFDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом, // чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений, // это автоматически выполняется рабочей областью. void CCVPROFDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // контекст устройства для рисования SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // Выравнивание значка по центру клиентского прямоугольника int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Нарисуйте значок dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } // Система вызывает эту функцию для получения отображения курсора при перемещении // свернутого окна. HCURSOR CCVPROFDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CCVPROFDlg::OnBnClickedOk() { // TODO: добавьте свой код обработчика уведомлений CDialogEx::OnOK(); } void CCVPROFDlg::OnClose() { CloseHandle(hThread); cvReleaseCapture(&capture); ReleaseDC(cap_dc); CDialogEx:: OnClose(); } //--------------------------------------------------------------------------- HBITMAP CreateRGBBitmap(IplImage* _Grab) { char *App; IplImage *_Grab3 = 0, *_Grabf = 0; LPBITMAPINFO lpbi = new BITMAPINFO; lpbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); lpbi->bmiHeader.biWidth = _Grab->width; lpbi->bmiHeader.biHeight = _Grab->height; lpbi->bmiHeader.biPlanes = 1; lpbi->bmiHeader.biBitCount = 24; lpbi->bmiHeader.biCompression = BI_RGB; lpbi->bmiHeader.biSizeImage = WIDTHBYTES((DWORD)_Grab->width * 8) * _Grab->height; lpbi->bmiHeader.biXPelsPerMeter = 0; lpbi->bmiHeader.biYPelsPerMeter = 0; lpbi->bmiHeader.biClrUsed = 0; lpbi->bmiHeader.biClrImportant = 0; void *pBits; HBITMAP hBitmap = CreateDIBSection(NULL, lpbi, DIB_RGB_COLORS, (void **)&pBits, NULL, 0); delete lpbi; if (hBitmap)App = (char*)pBits; if (_Grab->depth != IPL_DEPTH_8U) { _Grabf = cvCloneImage(_Grab); if (_Grab) { cvReleaseImage(&_Grab); } _Grab = cvCreateImage(cvSize(_Grabf->width, _Grabf->height), IPL_DEPTH_8U, _Grabf->nChannels); cvConvert(_Grabf, _Grab); if (_Grabf) { cvReleaseImage(&_Grabf); } } if (_Grab->nChannels == 1) { _Grab3 = cvCreateImage(cvSize(_Grab->width, _Grab->height), IPL_DEPTH_8U, 3); cvMerge(_Grab, _Grab, _Grab, NULL, _Grab3); } if (_Grab->nChannels == 3) { _Grab3 = _Grab; } unsigned char *data; cvGetRawData(_Grab3, (uchar**)&data); if (_Grab3) { for (int i = 0; i < _Grab->height; i++) { memcpy(App + _Grab3->widthStep*(_Grab3->height - i - 1), data + _Grab3->widthStep*i, _Grab3->width * 3); } } if (_Grab->nChannels == 1) { cvReleaseImage(&_Grab3); } return hBitmap; } //---------------------------------------------------------------------------------- void DrawData(IplImage*_frame, CDC*dc) { RECT r; dc->GetClipBox(&r); int width = r.right-r.left; int height = r.bottom-r.top; IplImage *img = cvCreateImage(cvSize(width, height), _frame->depth, _frame->nChannels); cvResize(_frame, img); HBITMAP pBitmap; pBitmap = CreateRGBBitmap(img); HDC hMemDC = CreateCompatibleDC(dc->m_hDC); HGDIOBJ hOldBm = SelectObject(hMemDC, pBitmap); BitBlt(dc->m_hDC, 0, 0, width, height, hMemDC, 0, 0, SRCCOPY); SelectObject(hMemDC, hOldBm); DeleteDC(hMemDC); DeleteObject(pBitmap); cvReleaseImage(&img); }
  19. USB3Vision+Genicam+OpenCV

    В общем, прошла неделя консультаций и писем от поставщиков и интеграторов камер Basler и JAI. Результат - обе эти камеры (точнее их ПО) могут взаимодействовать с OpenCV. И там и там есть реализованные проекты с OpenCV. В программном пакете JAI SDK имеется три примера интеграции на C++. ПО Basler к тому-же поддерживает DirectShow. В общем, может быть кому-нибуть данная веточка и информация пригодится.
  20. USB3Vision+Genicam+OpenCV

    Вот например у BASLER: http://www.baslerweb.com/ru/produkty/matrichnye-kamery/ace/aca1300-30uc
  21. USB3Vision+Genicam+OpenCV

    Распознавание профиля изделий в тяжелой промышленности в процессе формовки. Там серьезные требования к применяемым камерам. Использоваться будут две камеры (каждая в районе 1000 евро) и генераторы лазерной линии для формирования изображения профиля.
  22. Ок. Ну по крайней мере стало ясно что все возможно. Буду работать. Всем спасибо!
  23. Большое спасибо. Именно это я и искал. Я так понимаю нужно будет скачать последний OpenCV, т.к. в папке samples версии 2.1 у меня такого примера нет. Еще раз респект!
  24. Именно так - ось обьекта может отклоняться...Но эту проблему я решу. Как я говорил ранее у меня основной затык не в железе или том как снять четыре изображения. Допустим я из получил и функциями OpenCV развернул и убрал влияние перспективы. Как, какими функциями OpenCV можно корректно склеить их в единую картинку, сформировав единый профиль?
  25. Спасибо откликнувшимся. Вручную развороты совмещать и потом по этому пути программно проводить не получится - изделие не строго фиксировано, а может несколько смещаться. Хорошие ссылки - хорошие мысли. Отдельный респект за ссылку на 3D камеры. Но аппаратная сторона меня не очень беспокоит. Камеры и точки их установки я подберу, выбор есть. Одна видеокамера не даст нужного результата - требуется минимум две, а лучше три или четыре. Это не суть важно. Для меня проблема именно в алгоритме совмещения изображений и наличия в OPENCV таковых функций.
×