SergeClause 0 Жалоба Опубликовано October 4, 2016 Народ! Дико извиняюсь! Помогите начинающему. Установил BCC55 - контрольные примеры прошли нормально Сбросил в главный каталог borland-a opencv OpenCV-2.3.1-win-superpack.exe Указал, где всё лежит main.cpp взял отсюда: http://robocraft.ru/blog/computervision/266.html Выскакивает вот эта ошибка Fatal F1004 C:\Borland\BCC55\opencv\modules\core\include\opencv2/core/core.hpp 512: Internal compiler error at 0x48581a with base 0x400000 Fatal F1004 C:\Borland\BCC55\opencv\modules\core\include\opencv2/core/core.hpp 512: Internal compiler error 512 строчка в файле core.hpp: template<int l> Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp); В этом файле я ничего не трогал, сам файл в приложении Это строчка шаблона, но я в них пока не силен Прошу помочь! core.hpp main.cpp Makefile1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 5, 2016 Borland C тоже в шаблонах не силен , тем более такой старый, то что Вы привели выше, только верхушка айсберга. Лучше переходите на visual studio или Qt, намного меньше проблем будет. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergeClause 0 Жалоба Опубликовано October 5, 2016 Только что, Smorodov сказал: Borland C тоже в шаблонах не силен , тем более такой старый, то что Вы привели выше, только верхушка айсберга. Лучше переходите на visual studio или Qt, намного меньше проблем будет. Установил Visual C++ 2010 Express. Попробую на нем. Не получится - попробую с Qt Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 5, 2016 Получится, но лучше было бы vs2015 community edition, он более новый и бесплатный. На ютубе полно видео по установке: Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergeClause 0 Жалоба Опубликовано October 5, 2016 vs2015 community пробовал, но у меня ХР, и он не ставится а менять операционку пока не хочу - боюсь зарыться Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergeClause 0 Жалоба Опубликовано October 11, 2016 (изменено) В 05.10.2016 at 17:21, Smorodov сказал: Borland C тоже в шаблонах не силен , тем более такой старый, то что Вы привели выше, только верхушка айсберга. Лучше переходите на visual studio или Qt, намного меньше проблем будет. Огромное спасибо! Нашел MS2010 Ultimate - настроил OpenCV Всё получилось в консольном варианте Где бы найти пример для Win? Изменено October 11, 2016 пользователем SergeClause Грамматическая ошибка Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 11, 2016 Почитайте этот топик: А так то, в большинстве случаев с консольным вариантом удобнее работать. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergeClause 0 Жалоба Опубликовано October 14, 2016 В 11.10.2016 at 19:44, Smorodov сказал: Почитайте этот топик: А так то, в большинстве случаев с консольным вариантом удобнее работать. Спасибо! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergeClause 0 Жалоба Опубликовано October 15, 2016 Рано я поторопился радоваться... При подключении дополнительных камер посыпались ошибки. Когда манипулирую одной камерой - все нормально. Когда двумя или тремя - рушится. Но странно - поначалу чаще срабатывало нормально, падало редко. Потом все чаще, чаще - сейчас нормальная работа вообще прекратилась. Грешил на комп - чистил ТЕМР, менял виртуальную память - не помогает. Что делать - ума не приложу. array.cpp main.cpp Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 16, 2016 А если проверять что изображение не пустое перед отображением ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergeClause 0 Жалоба Опубликовано October 16, 2016 Как это? Не успевает сформироваться? И прога пытается вывести пустоту в виде картинки? Понял, проверяю. Я использую три камеры. При запуске появляется черное окно системы и три окна с серым фоном для отображения картинок. Потом появляется сообщение об неуказанном исключении, всё падает, а при разворачивании системного окошка в нем читается сообщение об ошибке Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 16, 2016 Ну тогда надо идти в отладчик и смотреть где падает, и что чему равно. Проверьте открылись ли камеры, открываются ли они по одной, не идут ли пустые кадры, в общем добавьте нормальную обвязку с обработкой ошибок. Нумерация камер у вас в системе вполне может вас удивить, попробуйте разные варианты. Я читал с трех камер и все было нормально. ЗЫ: Не нужно каждый раз звать waitKey, достаточно одного раза для обновления всех окон. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergeClause 0 Жалоба Опубликовано October 16, 2016 Внёс в прожку "примочки". Действительно, пытаюсь вывести пустое изображение. А как с этим бороться? Мне вообще-то нужно шесть камер подключить... #include<opencv\cv.h> #include<opencv\highgui.h> #include <string> #include <iostream> using namespace std; using namespace cv; int main(){ cout << "\nStart!\n"; Mat imageC; VideoCapture capC; capC.open(0); namedWindow("Central", CV_WINDOW_NORMAL); Mat imageB; VideoCapture capB; capB.open(1); namedWindow("Back", CV_WINDOW_NORMAL); Mat imageD; VideoCapture capD; capD.open(2); namedWindow("Down", CV_WINDOW_NORMAL); while(1){ capC >> imageC; cout << "C " << imageC.empty(); cout << "\n"; imshow("Central", imageC); waitKey(100); capB >> imageB; cout << "B " << imageB.empty() << "\n"; if (imageB.empty()==0) { imshow("Back", imageB); } waitKey(100); capD >> imageD; cout << "D " << imageD.empty() << "\n"; if (imageD.empty()==0) { imshow("Down", imageD); } waitKey(100); } return 0; } main.cpp Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 16, 2016 Вероятно открылась только одна камера. У VideoCapture есть метод isOpened, желательно бы его тоже проверять после открытия камер. Если не открываются, то надо проверять могут ли эти камеры вообще совместно работать. Нашел, кстати свой тест 3-х камер: #include "opencv2/highgui/highgui.hpp" #include <opencv2/objdetect/objdetect.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> #include <vector> #include <stdio.h> using namespace cv; using namespace std; int main(int ac, char** av) { VideoCapture capture0(0); VideoCapture capture1(1); VideoCapture capture2(2); if (!capture0.isOpened()) { cout << "Cam 0 failed to open." << endl; return 0; } if (!capture1.isOpened()) { cout << "Cam 1 failed to open." << endl; return 0; } if (!capture0.isOpened()) { cout << "Cam 2 failed to open." << endl; return 0; } namedWindow("Cam0"); namedWindow("Cam1"); namedWindow("Cam2"); Mat frame0; Mat frame1; Mat frame2; int k = 0; while (k != 27) { capture0 >> frame0; capture1 >> frame1; capture2 >> frame2; if (!frame0.empty()) { imshow("Cam0", frame0); } else { cout << "frame from cam 0 empty" << endl; } if (!frame1.empty()) { imshow("Cam1", frame1); } else { cout << "frame from cam 1 empty" << endl; } if (!frame2.empty()) { imshow("Cam2", frame2); } else { cout << "frame from cam 2 empty" << endl; } k = waitKey(20); } return 0; } Код проверок добавил сейчас, не компилировал, должно работать, но мог где нибудь опечататься. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergeClause 0 Жалоба Опубликовано October 16, 2016 Нашел причину. Однако устранить не смог. Камеры "выпадают", когда "сидят" на хабе. Подключил напрямую - заработало. Подключаю через хаб - "видно" только одну - "нулевую", хотя диспетчер устройств видит все три. Хабы у меня "Defender" - написал им в техподдержку, посмотрим, что ответят. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 17, 2016 Скорее всего это связано с нехваткой пропускной способности порта. Камеры, как и цифровые колонки и микрофоны кстати, резервируют для себя определенной (довольно большой) ширины канал, поэтому обычно больше одной камеры на один usb-хост не вешают. Ну еще может быть питания не хватает, хотя это менее вероятно чем первое. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergeClause 0 Жалоба Опубликовано October 17, 2016 Может, как-то можно упорядочить? Мне нужно "окучить" шесть камер - три фронтальные, одну - верхнюю, одну - нижнюю и одну - тыловую. Если каждая из них будет посылать по 4 кадра в секунду, получается 6х4=24 - нормальный поток. Придется как-то все собирать внизу, прежде чем посылать наверх. Вы можете написать мне на sergeclause@mail.ru ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 17, 2016 Камеры резервируют поток при подключении, а не при захвате кадра, и вышибают друг друга если потока не хватает. USB все таки осуществляют синхронный обмен данными, и кадры с камеры идут постоянным потоком, независимо от того как часто Вы их запрашиваете. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах