opencv2学习笔记:4.2计算图像直方图
2014-02-13 21:30
676 查看
根据这个代码做一遍,理解一下意思,就基本能懂得原理了。
注意:图像的坐标,跟平时的我们数学中的坐标是不一样的。
右边的为直方图。
这个是各个像素的值个数,根据不同的个数得到直方图,当然直方图更容易理解图中像素的大致分布情况。
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include "cv.h" #include <iostream> using namespace std; class HistogramiD { private: int histSize[1];//项的数量 float hranges[2];//像素的最小及最大值 const float*ranges[1]; int channels[1];//仅用到一个通道 public: HistogramiD() { //准备1D直方图的参数 histSize[0]=256; hranges[0]=0.0; hranges[1]=255.0; ranges[0]=hranges; channels[0]=0;//默认情况,我们考察0通道 } cv::MatND getHistogram(const cv::Mat &image) { cv::MatND hist; //计算直方图 cv::calcHist(&image,1,channels,cv::Mat(),hist,1,histSize,ranges); return hist; } cv::Mat getHistogramImage(const cv::Mat &image) { //首先计算直方图 cv::MatND hist=getHistogram(image); //计算出最大最小值 double maxVal=0; double minVal=0; cv::minMaxLoc(hist,&minVal,&maxVal,0,0); //做一大小为256*256全白的图,以备下面画直方图 cv::Mat histImg(histSize[0],histSize[0],CV_8U,cv::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); //图形坐标是从左到右增大即:0~256;从上到下增大,即:0~256; cv::line(histImg,cv::Point(h,histSize[0]),cv::Point(h,histSize[0]-intensity),cv::Scalar::all(0)); //cv::line(histImg,cv::Point(h/2,histSize[0]/2),cv::Point(h/2,0),cv::Scalar::all(100)); } return histImg; } }; int main() { cv::Mat image=cv::imread("grayCat.png") ; HistogramiD h; cv::MatND histo=h.getHistogram(image); for(int i=0;i<256;i++) { cout<<"Value"<<i<<"="<<histo.at<float>(i)<<endl;//显示像素的数值分布 } cv::namedWindow("Histogram"); cv::imshow("Histogram",h.getHistogramImage(image));//像素的直方图分布 cv::waitKey(20000); return 1; }
注意:图像的坐标,跟平时的我们数学中的坐标是不一样的。
右边的为直方图。
这个是各个像素的值个数,根据不同的个数得到直方图,当然直方图更容易理解图中像素的大致分布情况。
相关文章推荐
- OpenCV2编程手册笔记之 4.2计算图像的直方图(彩色)
- OpenCV2编程手册笔记之 4.2计算图像的直方图
- Python OpenCV学习笔记之:计算彩色图像各通道的直方图及图像区域直方图
- Python OpenCV学习笔记之:灰度图像的直方图计算
- 基础学习笔记之opencv(19):有关图像序列的直方图计算
- opencv学习之(五)-直方图计算和绘制图像直方图
- OpenCV 学习(计算图像的直方图)
- Opencv学习之 计算图像直方图
- OpenCV 学习(计算图像的直方图)
- OpenCV学习笔记——图像处理之直方图ImgProc
- Opencv学习笔记——绘制图像的像素直方图
- OpenCV 2 学习笔记(21): 使用直方图比较检索相似图像
- opencv学习笔记---图像直方图
- Python OpenCV学习笔记之:图像直方图反向投影(backprojection)原理简单实现
- OpenCV 2 学习笔记(17): 均衡化图像直方图
- Python OpenCV学习笔记之:图像直方图反向投影
- opencv学习(三十七)之图像直方图计算calcHist()
- OpenCV学习笔记(八)——图像处理之直方图ImgProc
- Python OpenCV学习笔记之:图像计算
- OpenCV学习笔记(12):单通道图像直方图