最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

opencv2对读书笔记计算图像的直方图

来源:懂视网 责编:小采 时间:2020-11-09 08:32:11
文档

opencv2对读书笔记计算图像的直方图

opencv2对读书笔记计算图像的直方图:1.一些小概念: (1) 像素在图像中的分布情况是这幅图像的一个重要特征。 (2) 直方图是一个简单的表,它给出了一幅图像或一组图像中用于给定数的像素数量。 2.calcHist 函数 calHist 是opencv 中可以计算直方图。 private:int histSize[1
推荐度:
导读opencv2对读书笔记计算图像的直方图:1.一些小概念: (1) 像素在图像中的分布情况是这幅图像的一个重要特征。 (2) 直方图是一个简单的表,它给出了一幅图像或一组图像中用于给定数的像素数量。 2.calcHist 函数 calHist 是opencv 中可以计算直方图。 private:int histSize[1

1.一些小概念: (1) 像素在图像中的分布情况是这幅图像的一个重要特征。 (2) 直方图是一个简单的表,它给出了一幅图像或一组图像中用于给定数的像素数量。 2.calcHist 函数 calHist 是opencv 中可以计算直方图。 private:int histSize[1];//色度变换宽度floa

1.一些小概念:


(1) 像素值在图像中的分布情况是这幅图像的一个重要特征。

(2) 直方图是一个简单的表,它给出了一幅图像或一组图像中用于给定数值的像素数量。


2.calcHist 函数


calHist 是opencv 中可以计算直方图。


private:
	int histSize[1];//色度变换宽度
	float hranges[2];//像素的最小值及最大值
	const float * ranges[1];//
	int channels[1];//使用的通道
	public:
	 Histogram1D(){
	histSize[0] = 256;
	hranges[0] = 0.0;
	hranges[1] = 255.0;
	ranges[0] = hranges;
	channels[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;
	 }

下面给出对一个具体图像求出直方图的例子


#include 
#include 
#include "cv.h"
#include "highgui.h"
#include 
using namespace std;

class Histogram1D {

private:
	int histSize[1];
	float hranges[2];
	const float* ranges[1];
	int channels[1];

public:
	Histogram1D() {
	histSize[0]= 256;
	hranges[0]= 0.0;
	hranges[1]= 255.0;
	ranges[0]= hranges; 
	channels[0]= 0; 
	}

 cv::MatND getHistogram(const cv::Mat &image) {
	
	cv::MatND hist;

	cv::calcHist(&image, //目标图像
	1,	// 计算一张直方图
	channels,	// 使用的通道数量
	cv::Mat(),	// 图像开关
	hist,	// 返回的直方图
	1,	// 1D直方图
	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);

	cv::Mat histImg(histSize[0], histSize[0], CV_8U,cv::Scalar(255));

	int hpt = static_cast(0.9*histSize[0]);

	for( int h = 0; h < histSize[0]; h++ ) {

	float binVal = hist.at(h);
	int intensity = static_cast(binVal*hpt/maxVal);
	cv::line(histImg,cv::Point(h,histSize[0]),cv::Point(h,histSize[0]-intensity),cv::Scalar::all(0));
	}
	return histImg;
	}
};

int main()
{
	cv::Mat image= cv::imread("group.jpg",0);
	if (!image.data)
	return 0; 

	cv::namedWindow("Image");
	cv::imshow("Image",image);

	Histogram1D h;

	cv::MatND histo= h.getHistogram(image);

	for (int i=0; i<256; i++) 
	cout << "Value " << i << " = " << histo.at(i) << endl; 

	cv::namedWindow("Histogram");
	cv::imshow("Histogram",h.getHistogramImage(image));

	cv::waitKey();
	return 0;
}

输出结果


声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

opencv2对读书笔记计算图像的直方图

opencv2对读书笔记计算图像的直方图:1.一些小概念: (1) 像素在图像中的分布情况是这幅图像的一个重要特征。 (2) 直方图是一个简单的表,它给出了一幅图像或一组图像中用于给定数的像素数量。 2.calcHist 函数 calHist 是opencv 中可以计算直方图。 private:int histSize[1
推荐度:
标签: 图片 直方图 读书
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top