服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - opencv学习笔记C++绘制灰度直方图

opencv学习笔记C++绘制灰度直方图

2022-11-30 13:49浅念念52 C/C++

这篇文章主要为大家介绍了opencv学习笔记C++绘制灰度直方图的实现代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

直方图的计算很简单,无非就是遍历图像的像素,统计每个灰度级的个数,opencv中calcHist函数能够同时计算过个图像,多个通道,不同灰度范围的灰度直方图。

?
1
2
3
4
void calcHist(const Mat* images, int nimages,
        const int* channels, InputArray mask,
        OutputArray hist, int dims, const int* histSize,
        const float** ranges, bool uniform = true, bool accumulate = false);

参数释义

images 输入的图像

nimages 输入的图像个数

channels 统计直方图第几通道

mask 可选的操作掩码

hist 输出的直方图数组

dims 需要统计直方图通道的个数

histSize 直方图分成多少个区间

ranges 像素值区间

uniform 是否进行归一化处理

accumulate 在多个图像时是否计算像素值个数

接下来直接看代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Mat img;
img = imread("猫1.jpg",0);
int channels[] = { 0 };
int bins = 256;
Mat hist;
int hist_size[] = { bins };
float range[] = { 0,256 };
const float*ranges[] = { range };
calcHist(&img, 1, 0, Mat(), hist, 1, hist_size, ranges);
double max_val;
minMaxLoc(hist, 0, &max_val);//定义矩阵中最小值,最大值的位置
int scale = 2;
int hist_height =256;
Mat hist_ing = Mat::zeros(hist_height, scale*bins, CV_8UC3);
for (int i = 0; i < bins; i++)
{
    float bin_val = hist.at<float>(i);//图像的灰度频率表
    int inten = cvRound(bin_val*hist_height / max_val);//绘制高度
    rectangle(hist_ing, Point(scale*i, hist_height - 1), Point((i + 1)*scale - 1, hist_height - inten), CV_RGB(255, 255, 255));
}
imshow("直方图", hist_ing);
waitKey(0);

效果如下:

opencv学习笔记C++绘制灰度直方图

以上就是opencv学习笔记C++绘制灰度直方图的详细内容,更多关于C++ opencv灰度直方图的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/Lightismore/article/details/123926939

延伸 · 阅读

精彩推荐
  • C/C++vscode 安装go第三方扩展包填坑记录的详细教程

    vscode 安装go第三方扩展包填坑记录的详细教程

    这篇文章主要介绍了vscode 安装go第三方扩展包填坑记录,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需...

    风子杨yxf7714982021-09-06
  • C/C++C语言摄氏度互相转换华氏

    C语言摄氏度互相转换华氏

    这篇文章主要介绍了C语言摄氏度互相转换华氏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    A-test@解5042021-10-20
  • C/C++C语言实现简单计算器功能(1)

    C语言实现简单计算器功能(1)

    这篇文章主要为大家详细介绍了C语言实现简单计算器功能的第一部分,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    xiaocaidayong9952021-08-20
  • C/C++算法之排列算法与组合算法详解

    算法之排列算法与组合算法详解

    这篇文章主要介绍了算法之排列算法与组合算法详解,本文以字典序法、递归法为例讲解了排列算法、全组合算法等,需要的朋友可以参考下...

    C语言程序设计8432021-01-30
  • C/C++C语言 array数组的用法详解

    C语言 array数组的用法详解

    数组是指一组数据的集合,(容器)数组中的每个数据称为元素。在Java中,数组也是Java对象。数组中的元素可以是任意类型(包括基本类型和引用类),但同...

    Dark And Grey9122022-02-12
  • C/C++C++ 利用硬件加速矩阵乘法的实现

    C++ 利用硬件加速矩阵乘法的实现

    这篇文章主要介绍了C++ 利用硬件加速矩阵乘法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    英雄哪里出来7062021-10-20
  • C/C++C++学习笔记之类成员指针

    C++学习笔记之类成员指针

    类成员指针时指可以指向类的非静态成员的指针,下面这篇文章主要给大家介绍了关于C++类成员指针的相关资料,文中通过实例代码介绍的非常详细,需要的朋...

    Ofnoname6782022-11-13
  • C/C++c语言中单引号和双引号的区别(顺利解决从字符串中提取IP地址的困惑)

    c语言中单引号和双引号的区别(顺利解决从字符串中提取IP地址的

    c语言中的单引号和双引号可是有很大区别的,使用之前一定要了解他们之间到底有什么不同,下面小编就给大家详细的介绍一下吧,对此还不是很了解的朋...

    C语言教程网2842020-12-20