opencv::直方图计算
直方图概念
上述直方图概念是基于图像像素值,其实对图像梯度、每个像素的角度、等一切图像的属性值,我们都可以建立直方图。
这个才是直方图的概念真正意义,不过是基于图像像素灰度直方图是最常见的.

直方图最常见的几个属性:
- dims 表示维度,对灰度图像来说只有一个通道值dims=
- bins 表示在维度中子区域大小划分,bins=,划分为256个级别
- range 表示值得范围,灰度值范围为[~]之间
// 把多通道图像分为多个单通道图像
split(
const Mat &src, //输入图像
Mat* mvbegin
)// 输出的通道图像数组 calcHist(
const Mat* images, //输入图像指针
int images, // 图像数目
const int* channels, // 通道数
InputArray mask, // 输入mask,可选,不用
OutputArray hist, //输出的直方图数据
int dims, // 维数
const int* histsize, // 直方图级数
const float* ranges, // 值域范围
bool uniform, // true by default
bool accumulate // false by defaut
)
int main(int argc, char** argv) {
Mat src = imread(STRPAHT2);
if (!src.data) {
printf("could not load image...\n");
return -;
}
// 分通道显示
vector<Mat> bgr_planes;
split(src, bgr_planes);
//imshow("single channel 0", bgr_planes[0]);
//imshow("single channel 1", bgr_planes[1]);
//imshow("single channel 2", bgr_planes[2]);
// 计算直方图
int histSize = ;
float range[] = { , };
const float *histRanges = { range };
Mat b_hist, g_hist, r_hist;
calcHist(&bgr_planes[], , , Mat(), b_hist, , &histSize, &histRanges, true, false);
calcHist(&bgr_planes[], , , Mat(), g_hist, , &histSize, &histRanges, true, false);
calcHist(&bgr_planes[], , , Mat(), r_hist, , &histSize, &histRanges, true, false);
// 归一化
int hist_h = ;
int hist_w = ;
int bin_w = hist_w / histSize;
Mat histImage(hist_w, hist_h, CV_8UC3, Scalar(, , ));
normalize(b_hist, b_hist, , hist_h, NORM_MINMAX, -, Mat());
normalize(g_hist, g_hist, , hist_h, NORM_MINMAX, -, Mat());
normalize(r_hist, r_hist, , hist_h, NORM_MINMAX, -, Mat());
// render histogram chart
for (int i = ; i < histSize; i++) {
line(histImage, Point((i - )*bin_w, hist_h - cvRound(b_hist.at<float>(i - ))),
Point((i)*bin_w, hist_h - cvRound(b_hist.at<float>(i))), Scalar(, , ), , LINE_AA);
line(histImage, Point((i - )*bin_w, hist_h - cvRound(g_hist.at<float>(i - ))),
Point((i)*bin_w, hist_h - cvRound(g_hist.at<float>(i))), Scalar(, , ), , LINE_AA);
line(histImage, Point((i - )*bin_w, hist_h - cvRound(r_hist.at<float>(i - ))),
Point((i)*bin_w, hist_h - cvRound(r_hist.at<float>(i))), Scalar(, , ), , LINE_AA);
}
imshow("OUTPUT_T", histImage);
waitKey();
return ;
}
opencv::直方图计算的更多相关文章
- OpenCV——直方图计算、寻早最值位置和对比匹配(判断两幅图的相似程度)
- OPENCV直方图与匹配
直方图可以用来描述不同的参数和事物,如物体的色彩分布,物体的边缘梯度模版以及目标位置的当前假设的概率分布. 直方图就是对数据进行统计的一种方法,并且将统计值定义到一系列定义好的bin(组距)中,获得一 ...
- opencv:直方图操作
示例程序: #include <opencv.hpp> using namespace cv; using namespace std; int main() { Mat src, dst ...
- opencv直方图该怎么画
图像直方图是反映图像中像素分布特性的统计表,一般显示如下: 其中横坐标代表的是图像像素的种类,或者说是灰度级,纵坐标代表的是每一级灰度下像素数或者该灰度级下像素数在所有图像总像素数总所占的百分比. 直 ...
- OpenCV直方图(直方图、直方图均衡,直方图匹配,原理、实现)
1 直方图 灰度级范围为 \([0,L-1]\) 的数字图像的直方图是离散函数 \(h(r_k) = n_k\) , 其中 \(r_k\) 是第\(k\)级灰度值,\(n_k\) 是图像中灰度为 \( ...
- opencv直方图均衡化
#include <iostream> #include "highgui.h" #include "cv.h" #include "cx ...
- opencv直方图拉伸
1.首先计算出一幅图像的直方图 //计算直方图 cv::MatND ImageHist::getHist(const cv::Mat &image){ cv::Mat im; if(image ...
- Win8 Metro(C#)数字图像处理--3.3图像直方图计算
原文:Win8 Metro(C#)数字图像处理--3.3图像直方图计算 /// <summary> /// Get the array of histrgram. /// </sum ...
- C++ 彩色图像(RGB)三通道直方图计算和绘制,图像逆时针旋转90° 实现代码
#include "iostream" #include "opencv2/opencv.hpp" #include "vector" us ...
随机推荐
- Day4 总结
- 55 (OC)* 图片圆角处理
iOS图片设置圆角性能优化 问题 圆角虽好,但如果使用不当,它就是你的帧数杀手,特别当它出现在滚动列表的时候.下面来看圆角如何毁掉你的流畅度的. 实测 layer.cornerRadius 我创建 ...
- 搭建第一个node服务器
1.在项目文件夹根目录创建app.js: (1)先引入模块 const http = require('http');//http是安装好node就有的一个模块,是用来创建http服务器的 (2)创建 ...
- idea 安装 lombok插件
一,前言 lombok是什么?lombak是一个工具,主要用来简化,减少代码的编写.使代码看起来更清晰,简洁. 而且lombok只是一个工具,不会打包到war中,不会增加任何消耗.只是在编译期中帮助我 ...
- 让tomcat使用指定JDK
一,前言 我们都知道,tomcat启动前需要配置JDK环境变量,如果没有配置JDK的环境变量,那么tomcat启动的时候就会报错,也就是无法启动. 但是在我们的工作或者学习过程中,有的时候会出现tom ...
- MySQL中四种隔离级别的演示
事务的隔离是并发操作中需要理解清楚的问题.MySQL中共有4种不同的隔离级别,这4种隔离级别分别是: 隔离级别类型 影响结果 READ UNCOMMITTED(未提交读) 事务将会读取到未提交的数据, ...
- 读《深入理解Elasticsearch》点滴-改正用户拼写错误
1.使用“建议”的方法:在query body的json结构体中,增加suggest节点:或者使用特殊的REST端点 2.es自带有多个不同的suggest实现,用来纠正用户的拼写错误及创建自动补全等 ...
- 基于hap的文件上传和下载
序言 现在,绝大部分的应用程序在很多的情况下都需要使用到文件上传与下载的功能,在本文中结合hap利用spirng mvc实现文件的上传和下载,包括上传下载图片.上传下载文档.前端所使用的技术不限,本文 ...
- Redis AOF 持久化详解
Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.但是一旦进程退出,Redis 的数据就会丢失. 为了解决这个问题,Redis 提供了 RDB 和 ...
- 关于SpringBoot 1.x和2.x版本差别
有点小差别 基本上基于SpringBoot的代码不需要改动,但有些配置属性和配置类,可能要改动,改动原因是 配置和类的更新或者是改名一般正常的MVC,数据库访问这些都不需要改动,下面按照本书章节说明区 ...