分享

直方图

 mscdj 2014-07-25

class Histogram1D

{

public:

Histogram1D()

{

histSize[0]=256;

hranges[0]=0.0;

hranges[1]=255.0;

ranges[0]=hranges;

channels[0]=0;

}

MatND getHistogram(const Mat &image)

{

MatND hist;

calcHist(&image,1,channels,Mat(),hist,1,histSize,ranges);

return hist;

}

protected:

private:

int histSize[1];

float hranges[2];

const float* ranges[1];

int channels[1];

};



Mat drawhist(MatND hist)

{

double maxvalue=0;

double minvalue=0;

minMaxLoc(hist,&minvalue,&maxvalue,0,0);

Mat histimg(256,256,CV_8U,Scalar(255));

int hpt=static_cast<int>(0.9*256);

for (int h=0;h<256;h++)

{

float binval=hist.at<float>(h);

int intensity=static_cast<int>(binval*hpt/maxvalue);

line(histimg,Point(h,256),Point(h,256-intensity),Scalar(0));

}

return histimg;

}


int _tmain(int argc, _TCHAR* argv[])

{

Mat src=imread("D:\\image\\img2\\lena.jpg",0);

if (!src.data)

{

cout<<"can not find picture"<<endl;

}

//int thresh=otsu(src);

Mat img;

//threshold(src,img,thresh,255,CV_THRESH_BINARY);

//calchist(src);

Histogram1D h;

MatND hist=h.getHistogram(src);

Mat histimg=drawhist(hist);

//for (int i=0;i<256;i++)

//{

// cout<<"value"<<i<<"="<<hist.at<float>(i)<<endl;

//}

namedWindow("win1");

imshow("win1",histimg);

waitKey(0);

return 0;

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多