首頁 > 資料庫 > mysql教程 > opencv2对读书笔记计算图像的直方图

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

WBOY
發布: 2016-06-07 15:00:56
原創
1292 人瀏覽過

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 <opencv2>
#include <opencv2>
#include "cv.h"
#include "highgui.h"
#include <iostream>
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<int>(0.9*histSize[0]);

		for( int h = 0; h (h);
			int intensity = static_cast<int>(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(i) <br>
<span>输出结果</span>

<p><br>
</p>
<p><img  src="pic/20151007/ciilprf4am3.png" alt="opencv2对读书笔记计算图像的直方图" ><br>
</p>


</int></int></iostream></opencv2></opencv2>
登入後複製
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板