Search code examples
c++cmathpixel

Get the largest, average and smallest value


To simplify my question, I will use the pixel as a template.


What is the fastest way I can calculate which value of a pixel is highest, median and lowest? For example:

unsigned char pixel[] = {128, 255, 64};
unsigned char highest, median, lowest;

get_pixel_values_priority(pixel, &highest, &median, &lowest);
printf("Highest %u\nMedian %u\nLowest %u", highest, median, lowest);

Should result:

Highest 255
Median 128
Lowest 64

Solution

  • Since you tagged this with C++, I would use std::vector objects mixed with the std::sort() algorithm for making it easy to find these stats. Here's a simple example.

    #include <algorithm>
    #include <iostream>
    #include <vector>
    
    int main() {
        std::vector<float> numbers = { 1, 4, 3, 2 };
    
        std::sort(numbers.begin(), numbers.end());
    
        // numbers = { 1, 2, 3, 4 }
    
        float min = numbers.front();
        float max = numbers.back();
    
        float median;
        if (numbers.size() % 2) {   // odd number of elements
            median = numbers[numbers.size() / 2];
        }
        else {                      // even number of elements
            median = (numbers[numbers.size() / 2] + numbers[numbers.size() / 2 - 1]) / 2;
        }
    }