Ask Your Question

Revision history [back]

below you can find modified version of pd_caltech.cpp could you try it ( to investigate your problem and more importantly we think about how to improve database module)

call it like

datasets-example-pd_caltech -p=E:/CaltechPedestrians/sets/set00/

pay attention / should be in end of path

thank you in advance

#include "opencv2/datasets/pd_caltech.hpp"

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>

#include <iostream>
#include <cstdio>

#include <string>
#include <vector>

using namespace std;
using namespace cv;
using namespace cv::datasets;

Mat getImageFromSeq(String seqImagesPath, String seqName, int index);

int main(int argc, char *argv[])
{
    const char *keys =
            "{ help h usage ? |    | show this message }"
            "{ path p         |true| path to dataset }";
    CommandLineParser parser(argc, argv, keys);
    string path(parser.get<string>("path"));
    if (parser.has("help") || path=="true")
    {
        parser.printMessage();
        return -1;
    }

  //  Ptr<PD_caltech> dataset = PD_caltech::create();
  //  dataset->load(path);

    // ***************
    // dataset contains for each object its images.
    // currently on loading extract all images to folder path/../images/
    // For example, let output train size and first element of first object
    // and number of it's images.
  //  printf("train size: %u\n", (unsigned int)dataset->getTrain().size());

  //  PD_caltechObj *example = static_cast<PD_caltechObj *>(dataset->getTrain()[0].get());
   // printf("first train object:\n");
  //  printf("name: %s\n", example->name.c_str());
  //  printf("images number: %u\n", (unsigned int)example->imageNames.size());
  //  printf("first image name: %s\n", example->imageNames[0].c_str());
  //  printf("images were extracted to path/../images/\n");

    for (int i = 0; i < 100; i++)
    {
        Mat test = getImageFromSeq(path, "V000.seq", i);
        if (test.empty())
        {
            cout << "the specified file can't be opened, check the path";
            return 1;
        }
        imshow("Test", test);
        waitKey();
    }
    return 0;
}

Mat getImageFromSeq(String seqImagesPath, String seqName, int index)
{
    Mat image;
    int counter=0;
    FILE *f = fopen((seqImagesPath + seqName).c_str(), "rb");
    if (f != NULL)
    {
#define SKIP 28+8+512
        fseek(f, SKIP, SEEK_CUR);
        unsigned int header[9];
        size_t res = fread(header, 9, 4, f);
        double fps;
        res = fread(&fps, 1, 8, f);
        fseek(f, 432, SEEK_CUR);
        printf("width %u\n", header[0]);
        printf("height %u\n", header[1]);
        printf("imageBitDepth %u\n", header[2]);
        printf("imageBitDepthReal %u\n", header[3]);
        printf("imageSizeBytes %u\n", header[4]);
        printf("imageFormat %u\n", header[5]);
        printf("fps %f\n", fps);
        printf("trueImageSize %u\n", header[8]);
        unsigned int numFrames = header[6];
        printf("numFrames %u\n", numFrames);
        string ext;
        switch (header[5])
        {
        case 100:
        case 200:
            ext = "raw";
            break;
        case 101:
            ext = "brgb8";
            break;
        case 102:
        case 201:
            ext = "jpg";
            break;
        case 103:
            ext = "jbrgb";
            break;
        case 001:
        case 002:
            ext = "png";
            break;
        }

        for (unsigned int i = 0; i < numFrames; ++i)
        {
            unsigned int size;
            res = fread(&size, 1, 4, f);

            char imgName[20];
            sprintf(imgName, "/%u.%s", i, ext.c_str());

            // comment fseek and uncomment next block to unpack all frames
            if (index == counter)
            {
                char *img = new char[size];
                fread(img, size, 1, f);
                //string imgPath(objectPath + seqName + imgName);
                //FILE *fImg = fopen(imgPath.c_str(), "wb");
                //fwrite(img, size, 1, fImg);
                //fclose(fImg);
                Mat buf = Mat(1, size, CV_8UC1, (void *)img);

                image = imdecode(buf, IMREAD_COLOR);

                delete[] img;
                fclose(f);
                return image;
            }
            else
            {
                fseek(f, size, SEEK_CUR);
            }
            counter++;
            fseek(f, 12, SEEK_CUR);
        }

        if (0 != res) // should fix unused variable warning
        {
            res = 0;
        }

        fclose(f);
    }
    return image;
}

below you can find modified version of pd_caltech.cpp could you try it ( to investigate your problem and more importantly we let us think about how to improve database module)

call it like

datasets-example-pd_caltech -p=E:/CaltechPedestrians/sets/set00/

pay attention / should be in end of path

thank you in advance

#include "opencv2/datasets/pd_caltech.hpp"

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>

#include <iostream>
#include <cstdio>

#include <string>
#include <vector>

using namespace std;
using namespace cv;
using namespace cv::datasets;

Mat getImageFromSeq(String seqImagesPath, String seqName, int index);

int main(int argc, char *argv[])
{
    const char *keys =
            "{ help h usage ? |    | show this message }"
            "{ path p         |true| path to dataset }";
    CommandLineParser parser(argc, argv, keys);
    string path(parser.get<string>("path"));
    if (parser.has("help") || path=="true")
    {
        parser.printMessage();
        return -1;
    }

  //  Ptr<PD_caltech> dataset = PD_caltech::create();
  //  dataset->load(path);

    // ***************
    // dataset contains for each object its images.
    // currently on loading extract all images to folder path/../images/
    // For example, let output train size and first element of first object
    // and number of it's images.
  //  printf("train size: %u\n", (unsigned int)dataset->getTrain().size());

  //  PD_caltechObj *example = static_cast<PD_caltechObj *>(dataset->getTrain()[0].get());
   // printf("first train object:\n");
  //  printf("name: %s\n", example->name.c_str());
  //  printf("images number: %u\n", (unsigned int)example->imageNames.size());
  //  printf("first image name: %s\n", example->imageNames[0].c_str());
  //  printf("images were extracted to path/../images/\n");

    for (int i = 0; i < 100; i++)
    {
        Mat test = getImageFromSeq(path, "V000.seq", i);
        if (test.empty())
        {
            cout << "the specified file can't be opened, check the path";
            return 1;
        }
        imshow("Test", test);
        waitKey();
    }
    return 0;
}

Mat getImageFromSeq(String seqImagesPath, String seqName, int index)
{
    Mat image;
    int counter=0;
    FILE *f = fopen((seqImagesPath + seqName).c_str(), "rb");
    if (f != NULL)
    {
#define SKIP 28+8+512
        fseek(f, SKIP, SEEK_CUR);
        unsigned int header[9];
        size_t res = fread(header, 9, 4, f);
        double fps;
        res = fread(&fps, 1, 8, f);
        fseek(f, 432, SEEK_CUR);
        printf("width %u\n", header[0]);
        printf("height %u\n", header[1]);
        printf("imageBitDepth %u\n", header[2]);
        printf("imageBitDepthReal %u\n", header[3]);
        printf("imageSizeBytes %u\n", header[4]);
        printf("imageFormat %u\n", header[5]);
        printf("fps %f\n", fps);
        printf("trueImageSize %u\n", header[8]);
        unsigned int numFrames = header[6];
        printf("numFrames %u\n", numFrames);
        string ext;
        switch (header[5])
        {
        case 100:
        case 200:
            ext = "raw";
            break;
        case 101:
            ext = "brgb8";
            break;
        case 102:
        case 201:
            ext = "jpg";
            break;
        case 103:
            ext = "jbrgb";
            break;
        case 001:
        case 002:
            ext = "png";
            break;
        }

        for (unsigned int i = 0; i < numFrames; ++i)
        {
            unsigned int size;
            res = fread(&size, 1, 4, f);

            char imgName[20];
            sprintf(imgName, "/%u.%s", i, ext.c_str());

            // comment fseek and uncomment next block to unpack all frames
            if (index == counter)
            {
                char *img = new char[size];
                fread(img, size, 1, f);
                //string imgPath(objectPath + seqName + imgName);
                //FILE *fImg = fopen(imgPath.c_str(), "wb");
                //fwrite(img, size, 1, fImg);
                //fclose(fImg);
                Mat buf = Mat(1, size, CV_8UC1, (void *)img);

                image = imdecode(buf, IMREAD_COLOR);

                delete[] img;
                fclose(f);
                return image;
            }
            else
            {
                fseek(f, size, SEEK_CUR);
            }
            counter++;
            fseek(f, 12, SEEK_CUR);
        }

        if (0 != res) // should fix unused variable warning
        {
            res = 0;
        }

        fclose(f);
    }
    return image;
}

below you can find modified version of pd_caltech.cpp could you try it ( to investigate your problem and more importantly let us think about how to improve database module)

call it like

datasets-example-pd_caltech -p=E:/CaltechPedestrians/sets/set00/

pay attention / should be in end of path

if the code run for you without problem you will see images of database (without extracting all of them to Hard Disk

thank you in advance

#include "opencv2/datasets/pd_caltech.hpp"

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>

#include <iostream>
#include <cstdio>

#include <string>
#include <vector>

using namespace std;
using namespace cv;
using namespace cv::datasets;

Mat getImageFromSeq(String seqImagesPath, String seqName, int index);

int main(int argc, char *argv[])
{
    const char *keys =
            "{ help h usage ? |    | show this message }"
            "{ path p         |true| path to dataset }";
    CommandLineParser parser(argc, argv, keys);
    string path(parser.get<string>("path"));
    if (parser.has("help") || path=="true")
    {
        parser.printMessage();
        return -1;
    }

  //  Ptr<PD_caltech> dataset = PD_caltech::create();
  //  dataset->load(path);

    // ***************
    // dataset contains for each object its images.
    // currently on loading extract all images to folder path/../images/
    // For example, let output train size and first element of first object
    // and number of it's images.
  //  printf("train size: %u\n", (unsigned int)dataset->getTrain().size());

  //  PD_caltechObj *example = static_cast<PD_caltechObj *>(dataset->getTrain()[0].get());
   // printf("first train object:\n");
  //  printf("name: %s\n", example->name.c_str());
  //  printf("images number: %u\n", (unsigned int)example->imageNames.size());
  //  printf("first image name: %s\n", example->imageNames[0].c_str());
  //  printf("images were extracted to path/../images/\n");

    for (int i = 0; i < 100; i++)
    {
        Mat test = getImageFromSeq(path, "V000.seq", i);
        if (test.empty())
        {
            cout << "the specified file can't be opened, check the path";
            return 1;
        }
        imshow("Test", test);
        waitKey();
    }
    return 0;
}

Mat getImageFromSeq(String seqImagesPath, String seqName, int index)
{
    Mat image;
    int counter=0;
    FILE *f = fopen((seqImagesPath + seqName).c_str(), "rb");
    if (f != NULL)
    {
#define SKIP 28+8+512
        fseek(f, SKIP, SEEK_CUR);
        unsigned int header[9];
        size_t res = fread(header, 9, 4, f);
        double fps;
        res = fread(&fps, 1, 8, f);
        fseek(f, 432, SEEK_CUR);
        printf("width %u\n", header[0]);
        printf("height %u\n", header[1]);
        printf("imageBitDepth %u\n", header[2]);
        printf("imageBitDepthReal %u\n", header[3]);
        printf("imageSizeBytes %u\n", header[4]);
        printf("imageFormat %u\n", header[5]);
        printf("fps %f\n", fps);
        printf("trueImageSize %u\n", header[8]);
        unsigned int numFrames = header[6];
        printf("numFrames %u\n", numFrames);
        string ext;
        switch (header[5])
        {
        case 100:
        case 200:
            ext = "raw";
            break;
        case 101:
            ext = "brgb8";
            break;
        case 102:
        case 201:
            ext = "jpg";
            break;
        case 103:
            ext = "jbrgb";
            break;
        case 001:
        case 002:
            ext = "png";
            break;
        }

        for (unsigned int i = 0; i < numFrames; ++i)
        {
            unsigned int size;
            res = fread(&size, 1, 4, f);

            char imgName[20];
            sprintf(imgName, "/%u.%s", i, ext.c_str());

            // comment fseek and uncomment next block to unpack all frames
            if (index == counter)
            {
                char *img = new char[size];
                fread(img, size, 1, f);
                //string imgPath(objectPath + seqName + imgName);
                //FILE *fImg = fopen(imgPath.c_str(), "wb");
                //fwrite(img, size, 1, fImg);
                //fclose(fImg);
                Mat buf = Mat(1, size, CV_8UC1, (void *)img);

                image = imdecode(buf, IMREAD_COLOR);

                delete[] img;
                fclose(f);
                return image;
            }
            else
            {
                fseek(f, size, SEEK_CUR);
            }
            counter++;
            fseek(f, 12, SEEK_CUR);
        }

        if (0 != res) // should fix unused variable warning
        {
            res = 0;
        }

        fclose(f);
    }
    return image;
}

below you can find modified version of pd_caltech.cpp (i added some code from library)

could you try it ( to investigate your problem and more importantly let us think about how to improve database module)

call it like

datasets-example-pd_caltech -p=E:/CaltechPedestrians/sets/set00/

pay attention / should be in end of path

if the code run for you without problem you will see images of database (without extracting all of them to Hard Disk

thank you in advance

#include "opencv2/datasets/pd_caltech.hpp"

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>

#include <iostream>
#include <cstdio>

#include <string>
#include <vector>

using namespace std;
using namespace cv;
using namespace cv::datasets;

Mat getImageFromSeq(String seqImagesPath, String seqName, int index);

int main(int argc, char *argv[])
{
    const char *keys =
            "{ help h usage ? |    | show this message }"
            "{ path p         |true| path to dataset }";
    CommandLineParser parser(argc, argv, keys);
    string path(parser.get<string>("path"));
    if (parser.has("help") || path=="true")
    {
        parser.printMessage();
        return -1;
    }

  //  Ptr<PD_caltech> dataset = PD_caltech::create();
  //  dataset->load(path);

    // ***************
    // dataset contains for each object its images.
    // currently on loading extract all images to folder path/../images/
    // For example, let output train size and first element of first object
    // and number of it's images.
  //  printf("train size: %u\n", (unsigned int)dataset->getTrain().size());

  //  PD_caltechObj *example = static_cast<PD_caltechObj *>(dataset->getTrain()[0].get());
   // printf("first train object:\n");
  //  printf("name: %s\n", example->name.c_str());
  //  printf("images number: %u\n", (unsigned int)example->imageNames.size());
  //  printf("first image name: %s\n", example->imageNames[0].c_str());
  //  printf("images were extracted to path/../images/\n");

    for (int i = 0; i < 100; i++)
    {
        Mat test = getImageFromSeq(path, "V000.seq", i);
        if (test.empty())
        {
            cout << "the specified file can't be opened, check the path";
            return 1;
        }
        imshow("Test", test);
        waitKey();
    }
    return 0;
}

Mat getImageFromSeq(String seqImagesPath, String seqName, int index)
{
    Mat image;
    int counter=0;
    FILE *f = fopen((seqImagesPath + seqName).c_str(), "rb");
    if (f != NULL)
    {
#define SKIP 28+8+512
        fseek(f, SKIP, SEEK_CUR);
        unsigned int header[9];
        size_t res = fread(header, 9, 4, f);
        double fps;
        res = fread(&fps, 1, 8, f);
        fseek(f, 432, SEEK_CUR);
        printf("width %u\n", header[0]);
        printf("height %u\n", header[1]);
        printf("imageBitDepth %u\n", header[2]);
        printf("imageBitDepthReal %u\n", header[3]);
        printf("imageSizeBytes %u\n", header[4]);
        printf("imageFormat %u\n", header[5]);
        printf("fps %f\n", fps);
        printf("trueImageSize %u\n", header[8]);
        unsigned int numFrames = header[6];
        printf("numFrames %u\n", numFrames);
        string ext;
        switch (header[5])
        {
        case 100:
        case 200:
            ext = "raw";
            break;
        case 101:
            ext = "brgb8";
            break;
        case 102:
        case 201:
            ext = "jpg";
            break;
        case 103:
            ext = "jbrgb";
            break;
        case 001:
        case 002:
            ext = "png";
            break;
        }

        for (unsigned int i = 0; i < numFrames; ++i)
        {
            unsigned int size;
            res = fread(&size, 1, 4, f);

            char imgName[20];
            sprintf(imgName, "/%u.%s", i, ext.c_str());

            // comment fseek and uncomment next block to unpack all frames
            if (index == counter)
            {
                char *img = new char[size];
                fread(img, size, 1, f);
                //string imgPath(objectPath + seqName + imgName);
                //FILE *fImg = fopen(imgPath.c_str(), "wb");
                //fwrite(img, size, 1, fImg);
                //fclose(fImg);
                Mat buf = Mat(1, size, CV_8UC1, (void *)img);

                image = imdecode(buf, IMREAD_COLOR);

                delete[] img;
                fclose(f);
                return image;
            }
            else
            {
                fseek(f, size, SEEK_CUR);
            }
            counter++;
            fseek(f, 12, SEEK_CUR);
        }

        if (0 != res) // should fix unused variable warning
        {
            res = 0;
        }

        fclose(f);
    }
    return image;
}