【OpenCV4】绘制直方图,调用calcHist()函数(图片美化版本)

2023-10-29

calcHist() 函数详解

具体请参考:
https://blog.csdn.net/qq_42067550/article/details/122533459

绘制直方图的代码

注意:这里的代码用于生产灰度图的直方图,如果要获得彩色图片多个通道的直方图,需要先分离各个通道,再分别绘制!

#include "opencv2/opencv.hpp"
#include "opencv2/highgui.hpp"
#include <string>

using namespace std;

cv::Mat getHistogramImage(cv::Mat hist)
{
	cv::Mat histData= hist.clone();
	int histSize = histData.rows;
	int targetPoint = 225;
	
	//int bin_w = cvRound((double)hist_w / histSize);
	int bin_w = 3; // 一个桶所占的宽度
	int hist_w = histSize * bin_w + 50; // 加上 50 是为了在图像两边各留 25 个像素的冗余
	int hist_h = cvRound(hist_w * 2 / 3) + 50; // 绘制长方形图片,同样预留边框
	// 创建直方图画布
	cv::Mat histImage(hist_h, hist_w, CV_8UC3, cv::Scalar(255, 255, 255));

	// 绘制坐标轴
	cv::line(histImage, cv::Point(hist_w - 20, hist_h - 20), cv::Point(20, hist_h - 20), cv::Scalar(0, 0, 0), 2, 4, 0);
	cv::line(histImage, cv::Point(20, hist_h - 20), cv::Point(20, 20), cv::Scalar(0, 0, 0), 2, 4, 0);

	// 绘制坐标轴刻度
	int seg = 16; // 每隔开 32 个桶设一个标记,256/32=8 共 9 个标记位(加上 0)
	int segs = histSize / seg;

	for (int i = 0; i <= segs; i++)
	{
		cv::line(histImage, cv::Point(26 + i * seg * bin_w, hist_h - 20), cv::Point(26 + i * seg * bin_w, hist_h - 15), cv::Scalar(0, 0, 0), 1, 4, 0);
		string text = to_string(i * seg);
		cv::putText(histImage, text, cv::Point(20 + i * seg * bin_w, hist_h - 5), 1, 0.8, cv::Scalar(0, 0, 0), 1, 8, false);
	}
	for (int i = 0; i <= segs; i++)
	{
		cv::line(histImage, cv::Point(20, hist_h - 20 - i * (hist_h - 40) / 8), cv::Point(15, hist_h - 20 - i * (hist_h - 40) / 8), cv::Scalar(0, 0, 0), 1, 4, 0);
	}


	/// 将直方图归一化到范围 [ 0, histImage.rows ]
	cv::normalize(histData, histData, 0, hist_h - 50, cv::NORM_MINMAX, -1, cv::Mat());

	/// 在直方图画布上画出直方图
	for (int i = 1; i < histSize; i++)
	{
		cv::line(histImage, cv::Point(26 + i * bin_w, hist_h - 20 - cvRound(histData.at<float>(i))),
			cv::Point(26 + (i - 1) * bin_w, hist_h - 20 - cvRound(histData.at<float>(i-1))),
			cv::Scalar(10), 1, cv::LINE_AA, 0);
	}

	return histImage;
}

int main()
{
	cv::Mat img = cv::imread("./dog.jpeg", 0); // 读取灰度图
	cv::Mat histogram;
	int histSize = 256;
	float range[] = {0, 255};
	int channels[] = {0};
	const float *histRanges = { range };
	bool uniform = true;
	bool accumulate = false;
	cv::calcHist(&img, 1, channels, cv::Mat(), histogram, 1, &histSize, &histRanges, uniform, accumulate);
	cv::Mat histImage = getHistogramImage(histogram);
	cv::imshow("1", histImage);
	cv::waitKey(0);
	return 0;
}

测试图片

在这里插入图片描述

生成的直方图

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【OpenCV4】绘制直方图,调用calcHist()函数(图片美化版本) 的相关文章

  • 创建 OpenCV 的 mouseCallback 函数的基于类的实现时遇到问题

    正如标题所示 我在基于类的 C 结构中实现 OpenCV 的 mouseCallback 函数时遇到了一些麻烦 请允许我解释一下 我定义了一个名为 BriskMatching 的类 在其中创建了一个名为 mouseCallback 的成员函
  • OpenCV 错误:connectedComponents_sub1 中断言失败 (L.channels() == 1 && I.channels() == 1) [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在 OpenCV python 中遇到以下错误 并用 google 搜索了很多 但无法解决 如果有人能为我提供一些线索
  • 从包含带边框的表格的图像中提取表格结构

    我正在尝试提取下表中的单元格位置 应用自适应阈值处理后 我能够获得细胞位置周围的轮廓 并且 HoughLines 获得垂直和水平结构元素 这是我的代码 img cv2 imread os path join img path file im
  • 如何使用 opencv python 计算乐高积木上的孔数?

    我正在开发我的 python 项目 我需要计算每个乐高积木组件中有多少个孔 我将从输入 json 文件中获取有关需要计算哪个程序集的信息 如下所示 img 001 red 0 blue 2 white 1 grey 1 yellow 1 r
  • 如何使用 colorchecker 在 opencv 中进行颜色校准?

    我有数码相机获取的色彩检查器图像 我如何使用它来使用 opencv 校准图像 按照以下颜色检查器图像操作 您是想问如何进行颜色校准或如何使用 OpenCV 进行校准 为了进行颜色校准 您可以使用校准板的最后一行 灰色调 以下是您应该逐步进行
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • Opencv Mat内存管理

    内存管理对于图像类至关重要 在opencv中 图像类是cv Mat 它有一个微妙的内存管理方案 假设我已经有了自己的图像类SelfImage class SelfImage public int width int height unsig
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • OpenCV:如何从网络摄像头获取原始 YUY2 图像?

    你知道如何获得吗raw YUY2来自网络摄像头的图像 使用 OpenCV DirectShow 无 VFW http opencv willowgarage com wiki CameraCapture http opencv willow
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open
  • iphone opencv - 模板匹配

    我已经在我的 iphone 项目中实现了这个 OpenCV 构建 http aptogo co uk 2011 09 opencv framework for ios http aptogo co uk 2011 09 opencv fra
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • 如何使用 AdaBoost 进行特征选择?

    我想使用 AdaBoost 从大量 100k 中选择一组好的特征 AdaBoost 的工作原理是迭代功能集并根据功能的执行情况添加功能 它选择对现有特征集错误分类的样本表现良好的特征 我目前正在 Open CV 中使用CvBoost 我得到
  • 找到 4 个特定的角像素并将它们与扭曲透视一起使用

    我正在使用 OpenCV 我想知道如何构建一个简单版本的透视变换程序 我有一张平行四边形的图像 它的每个角都由具有特定颜色的像素组成 该像素在图像中没有其他位置 我想遍历所有像素并找到这 4 个像素 然后我想将它们用作新图像中的角点 以扭曲
  • 将图像加载到现有 Mat 中

    有没有办法将图像加载到现有的 Mat 中 如果没有 有没有办法控制 OpenCV 在调用 cv imread 时分配内存的位置 我只是为您的类创建一个构造函数 该构造函数接受 imread 的输入参数并将图像直接加载 并分配 到您的类中 所
  • 针对不同处理器架构的 Gradle android 构建

    我想使用 Gradle 为 4 个不同的 Android CPU 处理器架构 armeabi armeabi v7a x86 mips 构建 4 个单独的 apk 我有为 4 个 CPU 架构构建的本机 OpenCV 库libs folde
  • 如何选择图像插值方法? (Emgu/OpenCV)

    Emgu OpenCV的 net包装器 提供的图像调整大小功能可以使用四种插值方法中的任意一种 http www emgu com wiki files 1 4 0 0 html 596dd03d 301e d3c6 4c53 c42855
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • OpenCV Sobel 滤波器 - 为什么它看起来这么糟糕,尤其是与 Gimp 相比?

    我正在尝试使用 OpenCV 重建一些我之前在 Gimp 中完成的预处理 第一级是用于边缘检测的 Sobel 滤波器 它在 Gimp 中运行得很好 现在这是我对 OpenCV 的尝试 opencv imgproc Sobel src sca

随机推荐

  • 全局加载less变量文件

    css preprocessorOptions less modifyVars hack true import reference pathResolve src design var index less additionalData
  • 什么是websocket协议

    websocket和http协议一样 都是基于tcp协议而发展起来的 在TCP两端 同一时间内 双方都可以主动向对方发送数据 这就是所谓的全双工 http协议 是基于tcp的 但是在同一时间内 客户端和服务器只能有一方主动发数据 这就是所谓
  • MapStruct中文文档(一)——定义映射器

    文章目录 3 定义映射器 3 1 基本映射 示例1 定义映射器的Java接口 3 2 映射组合 实验性功能 3 3 向映射器添加自定义方法 示例2 由抽象类定义的映射器 3 4 映射方法具有多个源参数 示例3 具有多个源参数的映射方法 示例
  • 基于Spring+SpringMVC+Mybatis 开发的web在线租房系统

    项目介绍 本项目包含用户端和管理端 采用JSP模板引擎渲染页面 使用Ajax实现前后端异步交互 用户端包含房屋列表 房屋详情 房屋筛选 租房 二手房 新房可按租金 出租方式 面积 房型进行筛选 按价格 发布时间进行排序 并提供登录 注册 收
  • 机器学习技术(五)——特征工程与模型评估

    机器学习技术 五 特征工程与模型评估 2 文章目录 机器学习技术 五 特征工程与模型评估 two 二 模型评估 1 Accuracy score 2 Confusion matrix混淆矩阵 1 多值 2 二值 3 Hamming loss
  • 使用antd3.x版本实现选择年份,并设置默认年份

    在使用antd3 x的时候 需要用到只选择年份的选择器 会遇到的很多问题 点击可以查看这个文档 可能会对你有所帮助 下面的代码的实现部分 import React Component from react import DatePicker
  • NNIE的运行机制

    NNIE的运行机制 一 背景 由于当前主流算法中都使用了深度学习算法 而深度学习算法在移植过程中 基于带有的NNIE推理单元的Hisi芯片将极大的提高算法模型的推理 加速算法计算 从而便于算法落地上车 故而本文将简要说明NNIE的运行机制
  • 基于深度学习的对联自动生成系统

    对联自动生成系统 1 项目目标 设计一个基于深度学习的对联生成系统 最终结果可以是一个简单的界面 在界面中 我输入一句上联 通过点击相应按钮 系统生成相应下联并显示出来 2 国内外相关工作 对联是属于我们中华民族独有的一种文学形式 国外研究
  • 类中的向上转型与向下转型详解

    我们的类与类之间会存在继承关系 子类继承父类 一个父类可以有多个子类 例如Animal类就可以有Cat子类 Dog子类 等等 那么我们在运用的时候根据不同的场景会出现向上转型和向下转型的情况 一 向上转型 1 Animal a1 new C
  • 【AntDB数据库】AntDB数据库迁移(三)

    导出导入数据 导入数据 导出的数据文件为copy命令的sql文件 可以直接使用psql f参数执行 但是在文件数量比较多的时候 建议采用脚本封装的方式 可控的进行数据导入 编写导入脚本 该脚本通过命令行参数来控制是通过表名查找文件导入还是按
  • Java AES加密与C#互转

    和外部系统对接的时候 对方要求用AES AES ECB PKCS5Padding对参数进行加密 给出的Java类如下 import org springframework util Base64Utils import javax cryp
  • c语言int型变量写入char数组的方法

    c语言int型变量写入char数组的方法 include
  • android开发使用 ndk-stack 打印崩溃日志

    使用 ndk stack 的时候需要你的 lib 编译为 debug 版 通常需要下面的修改 1 修改 android mk 增加 为 LOCAL CFLAGS 增加 g 选项 2 修改 application mk 增加 APP OPTI
  • 这套浙大出品的Python简直就是学习Python界的天花板

    教材PDF PTT课件 源码PPT等 相信我真的很容易上手 文末领取 关于Python技术储备 学好 Python 不论是就业还是做副业赚钱都不错 但要学会 Python 还是要有一个学习规划 最后大家分享一份全套的 Python 学习资料
  • jQuery 入门教程(28): jQuery UI Datepicker 示例(一)

    jQuery UI提供的Datepicker 是一个有着非常灵活配置的选择日期的UI组件 你可以配置显示日期的格式 语言 限制所能选择的日期范围 添加按钮等 基本用法如下 1 lt doctype html gt 2
  • YOLACT

    论文 YOLACT Real time Instance Segmentation 2019 作者 Daniel Bolya Chong Zhou Fanyi Xiao Yong Jae Lee 团队 University of Calif
  • 等保合规2022系列

    2022等保合规指南 第四篇 山石网科带你深入走进 等保 通过 等保合规2022系列 今年 关于等保你该了解什么 等保合规2022系列 一个中心 三重防护 助力企业等级保护建设更科学 以及 等保合规2022系列 20余年来 等级保护在如何
  • 使用Python爬虫获取豆瓣影评,并用词云显示

    使用Python爬虫获取豆瓣影评 并用词云显示 Python语言流行到现在 目前最受开发者喜爱的功能莫过于它的爬虫功能 以至于很多人以为Python的英语发音也是 爬虫 其实它是读作 啪善 pa n 而爬取网络信息 只是它的一个功能 它同时
  • python:鸡兔同笼,已知鸡兔总头数为 h,总腿数为 f,编写程序计算鸡兔各有多少只。

    h eval input 请输入鸡兔的总头数 f eval input 请输入鸡兔的总腿数 fowl 4 h f 2 rabbit h fowl print 笼中有 只鸡和 只兔子 format fowl rabbit
  • 【OpenCV4】绘制直方图,调用calcHist()函数(图片美化版本)

    文章目录 calcHist 函数详解 绘制直方图的代码 测试图片 生成的直方图 calcHist 函数详解 具体请参考 https blog csdn net qq 42067550 article details 122533459 绘制