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 ...
随机推荐
- Scala 系列(十三)—— 隐式转换和隐式参数
一.隐式转换 1.1 使用隐式转换 隐式转换指的是以implicit关键字声明带有单个参数的转换函数,它将值从一种类型转换为另一种类型,以便使用之前类型所没有的功能.示例如下: // 普通人 clas ...
- MOOC web前端开发笔记(一)
网站和网页 网站 互联网上用于展示特定内容的相关网页的集合. 网页 网站中的一页,一个网站中的网页通过"超链接"的方式被组织在一起. 主页 进入网站看到的第一个网页,主页的文件名通 ...
- 32 (OC)* keyChain的本质
1:它是一个sqlite数据库,其保存的所有数据都是加密过的. 2:Keychain是加密规则(key)的集合.每个规则必须含有以下三个要素:认证算法.认证密钥(加密字符串).规则的时间. 3:key ...
- uboot学习之uboot启动流程简述
一.uboot启动分为了三个阶段BL0.BL1.BL2:BL0表示上电后运行ROM中固化的一段程序,其中ROM中的程序是厂家写进去的,所以具体功能可能根据厂家芯片而有所不同.功能如下: 初始化系统时钟 ...
- Widget 中的 State 解析
StatefulWidget 应对有交互.需要动态变化视觉效果的场景 StatelessWidget 则用于处理静态的.无状态的视图展示 那么,StatelessWidget 是否有存在的必要?Sta ...
- WebStorm2017.3.4版本 注册码
http://idea.singee77.com http://im.js.cn:8888
- 【翻译】Docker Compose 与Docker Stack的不同
翻译原文 Docker引擎在1.12 版本集成了Docker Swarm, 带来了一些新工具. 现在可以无需安装 Docker Compose, 就可以利用docker-compose.yml 文件 ...
- .Net Core 跨平台:一个简单程序的多平台(windows、Linux、osx)发布
.Net Core 跨平台:一个简单程序的多平台(windows.Linux.osx)发布 .Net Core 3.0 已于2019年9月23日发布了,包含了一些新特性,具体参见Announcing ...
- 升级@Scheduled-分布式定时任务
最近我在对项目的定时任务服务升级,希望改造成分布式,原本是利用@Scheduled注解实现,然而它并不支持分布式,如果改成quartz或者Spring Cloud Task,感觉对于自己这个简单的项目 ...
- forEach标签
1.forEach标签的简单使用: (1)未设置步长属性时,默认步长为1: <c:forEach "> <c:out value="${number}" ...