64,654
社区成员
发帖
与我相关
我的任务
分享
Mat getHistogramImage(const cv::Mat &image,CvScalar &histCol = CV_RGB(255,0,0)){
Mat hist= getHistogram(image);
double maxVal=0;
double minVal=0;
minMaxLoc(hist, &minVal, &maxVal, 0, 0);
Mat histImg(histSize[0], histSize[0],CV_8U,Scalar(255));
int hpt = static_cast<int>(0.9*histSize[0]);
for( int h = 0; h < histSize[0]; h++ ) {
float binVal = hist.at<float>(h);
int intensity = static_cast<int>(binVal*hpt/maxVal);
rectangle(histImg,Point(h,histSize[0]),
Point(h,histSize[0]-intensity),
histCol);
}
return histImg;
}
Mat multiStretch(Mat &img,int minValue = 0){
vector<Mat>vecBgr;
vector<Mat>dst(3);
split(img,vecBgr);
Histogram1D h;
dst[0] = h.stretch(vecBgr[0],minValue);
dst[1] = h.stretch(vecBgr[1],minValue);
dst[2] = h.stretch(vecBgr[2],minValue);
imshow("histogram_B",h.getHistogramImage(dst[0],CV_RGB(0,0,0)));
imshow("histogram_G",h.getHistogramImage(dst[1],CV_RGB(0,255,0)));
imshow("histogram_R",h.getHistogramImage(dst[2],CV_RGB(255,0,0)));
Mat merImg;
merge(dst,merImg);
imshow("Src_BGR",img);
imshow("stretched_BGR",merImg);
waitKey(3000);
return merImg;
}