void Triangulation::calculateLocalBackground() {
    // local calc BG
    //Calculation and testing background

    qDebug() << "start calc bg";

    vector < Mat > pics1;
    vector < Mat > pics2;

    for (int i = 1; i <= 4; i++) {
        Mat grey1, grey2;
        string s = QString::number(i).toUtf8().constData();
        Mat img1 = imread("image1150330fish" + s + ".jpg");
        Mat img2 = imread("image2150330fish" + s + ".jpg");
        cvtColor(img1, grey1, CV_BGR2GRAY);
        cvtColor(img2, grey2, CV_BGR2GRAY);
        pics1.push_back(grey1);
        pics2.push_back(grey2);
    }

    qDebug() << "added imgs";

    Q_ASSERT(pics1.size() == pics2.size());

    int w = 1600;
    int h = 1200;

    Mat bg1(h, w, CV_8UC1);
    Mat bg2(h, w, CV_8UC1);

    qDebug() << "bg1.cols: " << bg1.cols;
    qDebug() << "bg1.rows: " << bg1.rows;
    qDebug() << "pics1[0].cols: " << pics1[0].cols;
    qDebug() << "pics1[0].rows: " << pics1[0].rows;

    for (int i = 0; i < h; i++) { //rows
        for (int j = 0; j < w; j++) { //cols
            long long int s1 = 1; //0
            long long int s2 = 1; //0

            QVector < int > m1;
            QVector < int > m2;
            for (int k = 0; k < pics1.size(); k++) {
                s1 *= pics1[k].at<uchar>(i, j);
                s2 *= pics2[k].at<uchar>(i, j);

                m1.push_back(pics1[k].at<uchar>(i, j));
                m2.push_back(pics2[k].at<uchar>(i, j));
                //qDebug() << "pics1[k].at<uchar>(i, j): " << pics1[k].at<uchar>(i, j);
            }

            qSort(m1);
            qSort(m2);

            bg1.at<uchar>(i, j) = m1[m1.size() / 2];
            bg2.at<uchar>(i, j) = m2[m2.size() / 2];
        }
    }

    background->setImages(bg1, bg2);

    isBackgroundCalculated = true;

    qDebug() << "calced";
}
void Triangulation::calculateBackground() {

    //Calculation and testing background

    if (stereoImages.size() <= 0) {
        return;
    }

    qDebug() << "start calc bg";

    vector < Mat > pics1;
    vector < Mat > pics2;

    for (int i = 0; i < stereoImages.size(); i++) {
        Mat grey1, grey2;
        cvtColor(stereoImages[i]->getLeft(), grey1, CV_BGR2GRAY);
        cvtColor(stereoImages[i]->getRight(), grey2, CV_BGR2GRAY);
        pics1.push_back(grey1);
        pics2.push_back(grey2);

        qDebug() << i;
    }

    qDebug() << "added imgs";

    Q_ASSERT(pics1.size() == pics2.size());

    int w = pics1[0].cols;
    int h = pics1[0].rows;

    Mat bg1(h, w, CV_8UC1);
    Mat bg2(h, w, CV_8UC1);

    qDebug() << "bg1.cols: " << bg1.cols;
    qDebug() << "bg1.rows: " << bg1.rows;
    qDebug() << "pics1[0].cols: " << pics1[0].cols;
    qDebug() << "pics1[0].rows: " << pics1[0].rows;

    for (int i = 0; i < h; i++) { //rows
        for (int j = 0; j < w; j++) { //cols
            long long int s1 = 1; //0
            long long int s2 = 1; //0

            QVector < int > m1;
            QVector < int > m2;
            for (int k = 0; k < pics1.size(); k++) {
                s1 *= pics1[k].at<uchar>(i, j);
                s2 *= pics2[k].at<uchar>(i, j);

                m1.push_back(pics1[k].at<uchar>(i, j));
                m2.push_back(pics2[k].at<uchar>(i, j));
                //qDebug() << "pics1[k].at<uchar>(i, j): " << pics1[k].at<uchar>(i, j);
            }

            qSort(m1);
            qSort(m2);

            bg1.at<uchar>(i, j) = m1[m1.size() / 2];
            bg2.at<uchar>(i, j) = m2[m2.size() / 2];
        }
    }

    qDebug() << "calced";

    background->setImages(bg1, bg2);
}
Beispiel #3
0
void ScopePanel::drawPanelContents() {
    
    if (scopeMode == SCOPE_MODE_Y) {
        bgPanel.setFillColor(ThemeMgr::mgr.currentTheme->scopeBackground, ThemeMgr::mgr.currentTheme->scopeBackground * 2.0);
        bgPanel.calcTransform(transform);
        bgPanel.draw();
        glLineWidth(1.0);
        glEnable(GL_LINE_SMOOTH);
        glLoadMatrixf(transform.to_ptr());
        glColor3f(ThemeMgr::mgr.currentTheme->scopeLine.r * 0.35, ThemeMgr::mgr.currentTheme->scopeLine.g * 0.35,
                  ThemeMgr::mgr.currentTheme->scopeLine.b * 0.35);
        glBegin (GL_LINES);
        glVertex2f(-1.0, 0.0);
        glVertex2f(1.0, 0.0);
        glEnd();
    } else if (scopeMode == SCOPE_MODE_2Y)  {
        bgPanelStereo[0].setFillColor(ThemeMgr::mgr.currentTheme->scopeBackground, ThemeMgr::mgr.currentTheme->scopeBackground * 2.0);
        bgPanelStereo[1].setFillColor(ThemeMgr::mgr.currentTheme->scopeBackground, ThemeMgr::mgr.currentTheme->scopeBackground * 2.0);

        bgPanelStereo[0].calcTransform(transform);
        bgPanelStereo[0].draw();
        bgPanelStereo[1].calcTransform(transform);
        bgPanelStereo[1].draw();

        glLineWidth(1.0);
        glLoadMatrixf(transform.to_ptr());
        glColor3f(ThemeMgr::mgr.currentTheme->scopeLine.r, ThemeMgr::mgr.currentTheme->scopeLine.g, ThemeMgr::mgr.currentTheme->scopeLine.b);
        glEnable(GL_LINE_SMOOTH);
        glBegin (GL_LINES);
        glVertex2f(-1.0, 0.0);
        glVertex2f(1.0, 0.0);
        glColor3f(ThemeMgr::mgr.currentTheme->scopeLine.r * 0.35, ThemeMgr::mgr.currentTheme->scopeLine.g * 0.35,
                  ThemeMgr::mgr.currentTheme->scopeLine.b * 0.35);
        glVertex2f(-1.0, 0.5);
        glVertex2f(1.0, 0.5);
        glVertex2f(-1.0, -0.5);
        glVertex2f(1.0, -0.5);
        glEnd();

    } else if (scopeMode == SCOPE_MODE_XY) {
        RGBA4f bg1(ThemeMgr::mgr.currentTheme->scopeBackground), bg2(ThemeMgr::mgr.currentTheme->scopeBackground * 2.0);
        bg1.a = 0.05f;
        bg2.a = 0.05f;
        bgPanel.setFillColor(bg1, bg2);
        bgPanel.calcTransform(transform);
        bgPanel.draw();
        glLineWidth(1.0);
        glEnable(GL_POINT_SMOOTH);
        glPointSize(1.0);
        glLoadMatrixf(transform.to_ptr());
        glColor3f(ThemeMgr::mgr.currentTheme->scopeLine.r * 0.15, ThemeMgr::mgr.currentTheme->scopeLine.g * 0.15,
                  ThemeMgr::mgr.currentTheme->scopeLine.b * 0.15);
    }
    
    if (points.size()) {
        glEnable (GL_BLEND);
        glEnable (GL_LINE_SMOOTH);
        glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
        if (scopeMode == SCOPE_MODE_XY) {
            glBlendFunc(GL_ONE, GL_ONE);
        } else {
            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        }
        glColor4f(ThemeMgr::mgr.currentTheme->scopeLine.r, ThemeMgr::mgr.currentTheme->scopeLine.g, ThemeMgr::mgr.currentTheme->scopeLine.b, 1.0);
        glEnableClientState (GL_VERTEX_ARRAY);
        glVertexPointer(2, GL_FLOAT, 0, &points[0]);
        glLineWidth(1.5);
        if (scopeMode == SCOPE_MODE_Y) {
            glLoadMatrixf(bgPanel.transform.to_ptr());
            glDrawArrays(GL_LINE_STRIP, 0, points.size() / 2);
        } else if (scopeMode == SCOPE_MODE_2Y)  {
            glLoadMatrixf(bgPanelStereo[0].transform.to_ptr());
            glDrawArrays(GL_LINE_STRIP, 0, points.size() / 4);

            glLoadMatrixf(bgPanelStereo[1].transform.to_ptr());
            glDrawArrays(GL_LINE_STRIP, points.size() / 4, points.size() / 4);
        } else if (scopeMode == SCOPE_MODE_XY) {
            glLoadMatrixf(bgPanel.transform.to_ptr());
            glDrawArrays(GL_POINTS, 0, points.size() / 2);
        }
        glLineWidth(1.0);
        glDisableClientState(GL_VERTEX_ARRAY);
        glDisable(GL_BLEND);
    }
}