自定义直方图,opencv

本文介绍如何利用OpenCV库在Python中创建自定义的直方图。通过提供的代码示例,读者可以了解到直方图绘制的基本步骤和关键函数的用法。
在实际应用场景中,我们可以根据需求调整计算的直方图区间,针对灰度直方图而言,我们可以将区间【0,255】分成以下几个区间:【0,60】,【61,120】,【121,160】,【161,220】,【221,255】。然后分别统计各个区间的灰度分布,进一步实现自定义直方图。

代码如下:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"
#include <stdio.h>
#include <string>
using namespace std;
using namespace cv;
int main()
{
	cv::Mat srcImage = cv::imread("C:\\Users\\LP\\Desktop\\C++\\ConsoleApplication4\\ConsoleApplication4\\RGBFlower4.jpg");
	
	if (srcImage.empty())
	{
		return -1;
	} 
	cv::imshow("原图像", srcImage);
	//灰度转换
	cv::Mat srcGray;
	cv::cvtColor(srcImage, srcGray, CV_RGB2GRAY);
	cv::imshow("srcGray", srcGray);
	//初始化直方图参数
	const int channels[1] = {0};
	const int histSize[1] = {256};
	//设定区间
	float hranges[6] = {0, 60, 120, 160, 220, 255};
	const float* ranges[1] = {hranges};
	cv::MatND hist;
	//计算直方图
	cv::calcHist(&srcGray, 1, channels, cv::Mat(), hist, 1, histSize, ranges);
	//求直方图最大值
	double maxHist = 0;
	cv::minMaxLoc(hist, 0, &maxHist, 0, 0);
	//设置直方图参数
	int hist_Size = hist.rows;
	cv::Mat histImg(hist_Size, hist_Size, CV_8U, cv::Scalar(255));
	//绘制直方图
	for (int h = 0; h < hist_Size; h++)
	{
		float binVal = hist.at<float>(h);
		//归一化,根据最大值计算变化范围
		int intensity = static_cast<int>(binVal * hist_Size / maxHist);
		//绘制直方图信息
		cv::line(histImg, cv::Point(h, hist_Size), cv::Point(h, hist_Size-intensity), cv::Scalar::all(0));
	}
	
	cv::imshow("histImg", histImg);
	cv::waitKey(0);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值