Ask Your Question
0

Creating a Histogram

asked 2017-02-27 18:17:42 -0500

soh gravatar image

updated 2017-02-27 18:18:26 -0500

Is it possible in opencv to create a histogram of three counters?

edit retag flag offensive close merge delete

Comments

What's the meaning of "three counters",DO you mean "R G B"?

jsxyhelu gravatar imagejsxyhelu ( 2017-02-27 23:27:42 -0500 )edit

1 answer

Sort by ยป oldest newest most voted
0

answered 2017-02-28 00:37:11 -0500

pi-null-mezon gravatar image

updated 2017-02-28 00:38:45 -0500

Yes, it is possible. For the instance:

void ImageQualityController::calculateHist(const cv::Mat &input, float *blue, float *green, float *red)
{
    /* Calculates histograms of inputImage and copies them into input vectors,          *
     * it is caller responsibility to allocate memory for them, each needs float[256]   */

    int bins = 256;
    int histSize[] = { bins };
    float marginalRanges[] = { 0, 256 };
    const float* ranges[] = { marginalRanges };

    int channels[] = { 0 };
    cv::Mat hist;
    cv::calcHist(&input, 1, channels, cv::Mat(), // mask not used
        hist, 1, histSize, ranges,
        true, // the histogram is uniform
        false);
    auto pointer = hist.ptr<float>(0);
    for (auto i = 0; i < 256; i++) {
        blue[i] = pointer[i];
    }

    channels[0] = 1;
    cv::calcHist(&input, 1, channels, cv::Mat(), // mask not used
        hist, 1, histSize, ranges,
        true, // the histogram is uniform
        false);
    pointer = hist.ptr<float>(0);
    for (auto i = 0; i < 256; i++) {
        green[i] = pointer[i];
    }

    channels[0] = 2;
    cv::calcHist(&input, 1, channels, cv::Mat(), // mask not used
        hist, 1, histSize, ranges,
        true, // the histogram is uniform
        false);
    pointer = hist.ptr<float>(0);
    for (auto i = 0; i < 256; i++) {
        red[i] = pointer[i];
    }
}
edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2017-02-27 18:17:42 -0500

Seen: 153 times

Last updated: Feb 28 '17