Skip to content

Instantly share code, notes, and snippets.

@heisters
Created June 18, 2015 22:38
Show Gist options
  • Save heisters/9cd68181397fbd35031b to your computer and use it in GitHub Desktop.
Save heisters/9cd68181397fbd35031b to your computer and use it in GitHub Desktop.
Find the median of a single channel using OpenCv
namespace cv {
// calculates the median value of a single channel
// based on https://github.com/arnaudgelas/OpenCVExamples/blob/master/cvMat/Statistics/Median/Median.cpp
double median( cv::Mat channel )
{
double m = (channel.rows*channel.cols) / 2;
int bin = 0;
double med = -1.0;
int histSize = 256;
float range[] = { 0, 256 };
const float* histRange = { range };
bool uniform = true;
bool accumulate = false;
cv::Mat hist;
cv::calcHist( &channel, 1, 0, cv::Mat(), hist, 1, &histSize, &histRange, uniform, accumulate );
for ( int i = 0; i < histSize && med < 0.0; ++i )
{
bin += cvRound( hist.at< float >( i ) );
if ( bin > m && med < 0.0 )
med = i;
}
return med;
}
}
@johnlohit
Copy link

@rayryeng can you tell me what you use instead?

@hoonhoons
Copy link

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment