Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

a histogram is basically just an array (we'll use a cv::Mat), so your whole code boils down to:

// 1 row, 8 cols, filled with zeros:
cv::Mat hist(1, 8, CV_32S, Scalar(0));

for (; chain != NULL; chain = (CvChain*)chain->h_next)
{   
    CvSeqReader reader;
    int i, total = chain->total;

    cvStartReadSeq((CvSeq*)chain, &reader, 0);

    for (i = 0; i < total; i++)
    {
        char code;
        CV_READ_SEQ_ELEM(code, reader);
        int Fchain = (int)code;

        // increase the counter for the respective bin:
        hist.at<int>(0,FChain) ++;

        totalCount++;
    }
}

// print the raw histogram:
cout << "Histo: " << hist << endl;
cout << "Total: " << totalCount << endl;

// normalize it:
Mat prob = hist / totalCount;
cout << "Proba: " << prob << endl;

a histogram is basically just an array (we'll use a cv::Mat), so your whole code loop boils down to:

// 1 row, 8 cols, filled with zeros:
cv::Mat hist(1, 8, CV_32S, Scalar(0));

for (; chain != NULL; chain = (CvChain*)chain->h_next)
{   
    CvSeqReader reader;
    int i, total = chain->total;

    cvStartReadSeq((CvSeq*)chain, &reader, 0);

    for (i = 0; i < total; i++)
    {
        char code;
        CV_READ_SEQ_ELEM(code, reader);
        int Fchain = (int)code;

        // increase the counter for the respective bin:
        hist.at<int>(0,FChain) ++;

        totalCount++;
    }
}

// print the raw histogram:
cout << "Histo: " << hist << endl;
cout << "Total: " << totalCount << endl;

// normalize it:
Mat prob = hist / totalCount;
cout << "Proba: " << prob << endl;

a histogram is basically just an array (we'll use a cv::Mat), so your loop boils down to:

// 1 row, 8 cols, filled with zeros:
zeros, (float type, because we want to normalize later):
cv::Mat hist(1, 8, CV_32S, Scalar(0));
CV_32F, Scalar(0)); 

for (; chain != NULL; chain = (CvChain*)chain->h_next)
{   
    CvSeqReader reader;
    int i, total = chain->total;

    cvStartReadSeq((CvSeq*)chain, &reader, 0);

    for (i = 0; i < total; i++)
    {
        char code;
        CV_READ_SEQ_ELEM(code, reader);
        int Fchain = (int)code;

        // increase the counter for the respective bin:
        hist.at<int>(0,FChain) hist.at<float>(0,FChain) ++;

        totalCount++;
    }
}

// print the raw histogram:
cout << "Histo: " << hist << endl;
cout << "Total: " << totalCount << endl;

// normalize it:
Mat prob = hist / totalCount;
cout << "Proba: " << prob << endl;