Creating a Histogram
Is it possible in opencv to create a histogram of three counters?
Is it possible in opencv to create a histogram of three counters?
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];
}
}
Asked: 2017-02-27 18:17:42 -0600
Seen: 217 times
Last updated: Feb 28 '17
Unresolved inclusion in OpenCV+Android tutorial
How to convert Floating point image to 32-bit single-channel?
How to translate this to Java?
android: how to put a column into Mat
OpenCV Tutorial 1 - Add OpenCV on API 8
Running the OpenCV4Android application on my PC
What's the meaning of "three counters",DO you mean "R G B"?