cv::Mat Histogram1D::stretch(const cv::Mat &image, int minValue){ cv::MatND hist = getHistogram(image); int imin = 0; for( ; imin < m_histSize[0]; imin++){ //std::cout << hist.at<float>(imin) << std::endl; if( hist.at<float>(imin) > minValue ) break; } int imax = m_histSize[0] - 1; for( ; imax >= 0; imax-- ){ if(hist.at<float>(imax) > minValue ) break; } int dim(256); cv::Mat lookup(1, &dim, CV_8U ); for(int i = 0; i < 256; i++){ if( i < imin ) lookup.at<uchar>(i) = 0; else if ( i > imax ) lookup.at<uchar>(i) = 255; else lookup.at<uchar>(i) = static_cast<uchar>( 255.0*(i - imin)/ (imax-imin) + 0.5); } cv::Mat result; result = applyLookUp(image, lookup); return result; }
cv::Mat Processor::invertColors(const cv::Mat& image){ int dim(256); cv::Mat lut( 1 , &dim , CV_8U); for ( int i = 0 ; i < 256 ; i++ ) lut.at<uchar>(i) = 255 - i; return applyLookUp(image , lut); }
//-------------------------------------------------------------------------------------------------- // cv::Mat Histogram1D::stretch( const cv::Mat& image, int32_t minValue ) { // Compute histogram first cv::MatND hist = getHistogram( image ); // find left extremity of the histogram int imin = 0; for( ; imin < histSize_[0]; imin++ ) { std::cout << hist.at< float >( imin ) << std::endl; if( hist.at< float >( imin ) > minValue ) { break; } } // find right extremity of the histogram int imax = histSize_[0] - 1; for( ; imax >= 0; imax-- ) { if( hist.at< float >( imax ) > minValue ) { break; } } // Create lookup table int dims[1] = { 256 }; cv::MatND lookup( 1, dims, CV_8U ); for( int i = 0; i < 256; ++i ) { if( i < imin ) { lookup.at< uchar >( i ) = 0; } else if( i > imax ) { lookup.at< uchar >( i ) = 255; } else { lookup.at< uchar >( i ) = static_cast<uchar>( 255.0 * (i - imin) / (imax - imin) + 0.5 ); } } // Apply lookup table cv::Mat result; result = applyLookUp( image, lookup ); return result; }