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

Ошибка при компиляции corr.hpp

Recommended Posts

Народ!
Дико извиняюсь! Помогите начинающему.
Установил 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Borland C тоже в шаблонах не силен :) , тем более такой старый, то что Вы привели выше, только верхушка айсберга.

Лучше переходите на visual studio или Qt, намного меньше проблем будет.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, Smorodov сказал:

Borland C тоже в шаблонах не силен :) , тем более такой старый, то что Вы привели выше, только верхушка айсберга.

Лучше переходите на visual studio или Qt, намного меньше проблем будет.

Установил Visual C++ 2010 Express. Попробую на нем.
Не получится - попробую с Qt

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Получится, но лучше было бы vs2015 community edition, он более новый и бесплатный.

На ютубе полно видео по установке:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

vs2015 community пробовал, но у меня ХР, и он не ставится
а менять операционку пока не хочу - боюсь зарыться

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 05.10.2016 at 17:21, Smorodov сказал:

Borland C тоже в шаблонах не силен :) , тем более такой старый, то что Вы привели выше, только верхушка айсберга.

Лучше переходите на visual studio или Qt, намного меньше проблем будет.

Огромное спасибо!
Нашел MS2010 Ultimate  - настроил OpenCV
Всё получилось в консольном варианте
Где бы найти пример для Win?

 

Изменено пользователем SergeClause
Грамматическая ошибка

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почитайте этот топик: 

 

А так то, в большинстве случаев с консольным вариантом удобнее работать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 11.10.2016 at 19:44, Smorodov сказал:

Почитайте этот топик: 

 

А так то, в большинстве случаев с консольным вариантом удобнее работать.

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рано я поторопился радоваться... При подключении дополнительных камер посыпались ошибки. Когда манипулирую одной камерой - все нормально. Когда двумя или тремя - рушится. Но странно - поначалу чаще срабатывало нормально, падало редко. Потом все чаще, чаще - сейчас нормальная работа вообще прекратилась. Грешил на комп - чистил ТЕМР, менял виртуальную память - не помогает. Что делать - ума не приложу.

UnEx.JPG

BadFlag.JPG

array.cpp

main.cpp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если проверять что изображение не пустое перед отображением ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как это? Не успевает сформироваться? И прога пытается вывести пустоту в виде картинки? Понял, проверяю.

Я использую три камеры.
При запуске появляется черное окно системы и три окна с серым фоном для отображения картинок.
Потом появляется сообщение об неуказанном исключении, всё падает, а при разворачивании системного окошка в нем читается сообщение об ошибке

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну тогда надо идти в отладчик и смотреть где падает, и что чему равно.

Проверьте открылись ли камеры, открываются ли они по одной, не идут ли пустые кадры, в общем добавьте нормальную обвязку с обработкой ошибок.

Нумерация камер у вас в системе вполне может вас удивить, попробуйте разные варианты.

Я читал с трех камер и все было нормально.

ЗЫ: Не нужно каждый раз звать waitKey, достаточно одного раза для обновления всех окон.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Внёс в прожку "примочки". Действительно, пытаюсь вывести пустое изображение. А как с этим бороться? Мне вообще-то нужно шесть камер подключить...

#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

NotPict.JPG

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вероятно открылась только одна камера.

У 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;
}

Код проверок добавил сейчас, не компилировал, должно работать, но мог где нибудь опечататься.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нашел причину. Однако устранить не смог. Камеры "выпадают", когда "сидят" на хабе. Подключил напрямую - заработало. Подключаю через хаб - "видно" только одну - "нулевую", хотя диспетчер устройств видит все три. Хабы у меня "Defender" - написал им в техподдержку, посмотрим, что ответят. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скорее всего это связано с нехваткой пропускной способности порта.

Камеры, как и цифровые колонки и микрофоны кстати, резервируют для себя определенной (довольно большой) ширины канал, поэтому обычно больше одной камеры на один usb-хост не вешают.

Ну еще может быть питания не хватает, хотя это менее вероятно чем первое. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может, как-то можно упорядочить?
Мне нужно "окучить" шесть камер - три фронтальные, одну - верхнюю, одну - нижнюю и одну - тыловую.
Если каждая из них будет посылать по 4 кадра в секунду, получается 6х4=24 - нормальный поток.
Придется как-то все собирать внизу, прежде чем посылать наверх.
Вы можете написать мне на sergeclause@mail.ru ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Камеры резервируют поток при подключении, а не при захвате кадра, и вышибают друг друга если потока не хватает.

USB все таки осуществляют синхронный обмен данными, и кадры с камеры идут постоянным потоком, независимо от того как часто Вы их запрашиваете. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×