OpenCV4入门83:图像直方图变换-查找
入门系列索引:OpenCV入门索引目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
#include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> int main() { cv::Mat srcImage = cv::imread("..\\images\\flower3.jpg"); if( !srcImage.data ) return 1; cv::Mat srcGray; cvtColor(srcImage, srcGray, CV_BGR2GRAY); const int channels[1]={0}; const int histSize[1]={256}; float hranges[2]={0,255}; const float* ranges[1]={hranges}; cv::MatND hist; calcHist(&srcGray,1,channels,cv::Mat(), hist,1,histSize,ranges); int segThreshold = 50; int iLow =0; for (; iLow < histSize[0]; iLow++) { if (hist.at<float>(iLow) > segThreshold) { break; } } int iHigh = histSize[0] -1; for (; iHigh >=0; iHigh--) { if (hist.at<float>(iHigh) > segThreshold) { break; } } cv::Mat lookUpTable(cv::Size(1, 256), CV_8U); for (int i =0; i <256; i++) { if (i < iLow ){ lookUpTable.at<uchar>(i) =0; } else if (i > iHigh) { lookUpTable.at<uchar>(i) = 255; } else { lookUpTable.at<uchar>(i) = static_cast<uchar>( 255.0 * (i - iLow) / (iHigh - iLow + 0.5)); } } cv::Mat histTransResult; cv::LUT(srcGray, lookUpTable, histTransResult); cv::imshow("srcGray",srcGray); cv::imshow("histTransResult",histTransResult); cv::waitKey(0); return 0; }
|