绘制H-S直方图

#include<iostream>
#include<opencv2/opencv.hpp>


using namespace std;
using namespace cv;

//绘制H-S直方图。色调(H),饱和度(S),明度(V)。
//以H为横坐标,S为纵坐标来进行绘制直方图。
int main()
{
	//1 载入源图,转换为hsv图。
	Mat srcimage = imread("放牛图.jpg");
	Mat hsvimage;
	cvtColor(srcimage,hsvimage,CV_BGR2HSV);
	
	//2参数,准备调用calcHist函数。
	int nhsize = 30;
	int nssize = 32;
	int hist_size[] = {nhsize,nssize};
	int channels[] = {0,1};
	MatND hs_hist;//输出的结果,需要统计。
	float hrange[2] = {0,180};//0-179色调
	float srange[2] = {0,256};//saturation饱和度0-255
	const float* range[] = {hrange,srange};
	
	//3参数准备完毕,开始调用calcHist函数。
	calcHist(&hsvimage,1,channels,Mat(),hs_hist,2,hist_size,range,true,false);

    //4.然后开始画图参数的准备。
	double maxvalue=0;
	minMaxLoc(hs_hist,0,&maxvalue,0,0);//找出最大的maxvalue。

	//5.开始绘图。
	int x;
	float t;
	Mat result = Mat::zeros(nssize*10,nhsize*10,CV_8UC3);//结果的图。
	for(int i=0;i<nhsize;i++)
		for (int j = 0; j < nssize; j++)
		{
			t = hs_hist.at<float>(i, j);
			x = cvRound((t*255.0)/maxvalue);//注意,次数不能为doulbe
			//以方格为单位来绘制。
			rectangle(result,Point(i*10,j*10),Point((i+1)*10-1,(j+1)*10-1),Scalar::all(x),FILLED);


		}

	//6.显示图片
	imshow("rsc",srcimage);
	imshow("result",result);






	waitKey(0);
	return 0;

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值