opencv長條圖展開

來源:互聯網
上載者:User

標籤:style   blog   http   color   for   2014   ar   div   

1、首先計算出一幅映像的長條圖
//計算長條圖cv::MatND ImageHist::getHist(const cv::Mat &image){cv::Mat im;if(image.channels() == 3)cv::cvtColor(image,im,CV_RGB2GRAY,0);elseim = image;float r[2];r[0] = 0;r[1] = 255;const float *ranges[1];ranges[0] = r;cv::calcHist(&im,1,&channels,cv::Mat(),hist,1,&histSize,ranges);return hist;}//將長條圖產生映像,以便在MFC空間中顯示cv::Mat ImageHist::getHistImage(const cv::Mat &image){double maxVal = 0;double minVal = 0;cv::minMaxLoc(hist,&minVal,&maxVal,0,0);cv::Mat histImg(histSize,histSize,CV_8U,cv::Scalar(255));int high = histSize * 0.9;for (int i = 0;i < histSize;++i){float binVal = hist.at<float>(i);int inted = binVal / maxVal *high;cv::line(histImg,cv::Point(i,histSize),cv::Point(i,histSize - inted),cv::Scalar::all(0));}return histImg;}
2、去掉長條圖兩端bin為0或者小於某一數量的bin並記錄去掉後兩端的灰階值(mini,maxi),然後利用下面公式對顏色尋找表進行展開:(i - mini) * 255 / (maxi - mini) + 0.5
cv::Mat ImageHist::stretch(const cv::Mat &image,int minValue /* = 0 */){int mini = 0;for (;mini < histSize;++mini){if(hist.at<float>(mini) > minValue)break;}int maxi = histSize - 1;for (;maxi >= 0;--maxi){if(hist.at<float>(maxi) > minValue)break;}cv::Mat lookup(1,256,CV_8U);for (int i = 0;i < histSize;++i){if(i < mini)lookup.at<uchar>(i) = 0;else if(i > maxi)lookup.at<uchar>(i) = 255;elselookup.at<uchar>(i) =static_cast<uchar>((i - mini) * 255 / (maxi - mini) + 0.5);}cv::Mat result;cv::LUT(image,lookup,result);return result;}

結果:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.