OpenCV 自定义类 直方图

#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
using namespace cv;
using namespace std;


class Histogram1D
{
private:
int histSize[1];
int channels[1];
const float* ranges[1];
float hrang[2];


public:
Histogram1D()
{
  histSize[0]=256;
  channels[0]=0;
  ranges[0]=hrang;
  hrang[0]=0.0;
  hrang[1]=255.0;
}
//得到的是统计数据矩阵
cv::Mat getHistogram(const cv::Mat &img)
{
  cv::Mat hist;
  cv::calcHist(&img,1,channels,cv::Mat(),hist,1,histSize,ranges);
  return hist;
}
//统计矩阵变为直方图(统计数据为各个灰阶的图元数量,而直方图是他们的比例0~1
cv::Mat getHistogramImage(const cv::Mat &image)
{
cv::Mat histImage(histSize[0],histSize[0],CV_8U);
cv::Mat histMat=getHistogram(image);
double minV=0;
double maxV=0;
cv::minMaxLoc(histMat,&minV,&maxV);
double hpt=0.9*histSize[0];   //0~1的比例在具体图片的表现高度
   for(int h=0; h<histSize[0];h++)
{
float binVal=histMat.at<float>(h);
float intensity=cv::saturate_cast<int>(binVal*hpt/maxV);  
cv::line(histImage,cv::Point(h,histSize[0]),cv::Point(h,histSize[0]-intensity),cv::Scalar(120,0,0));
}
return histImage;
}   
};


int main()
{
   Mat model=imread("C:\\Users\\Administrator\\Desktop\\1.jpg");
   Histogram1D h;
   cv::namedWindow("a",0);
   imshow("a",h.getHistogramImage(model));
   cv::waitKey(0);
   return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值