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 ...
随机推荐
- valueForKey与valueForKeyPath 区别
1.删除数组中重复的数据 2.valueForKeyPath:可以深层次取到子属性,不管隐藏的多深 valueForKey:无法取到深层次子属性 但是也有其相似的地方: 比如:快速找到字典数组中ke ...
- 个人网站(sysoft.net.cn)被k,公司名都搜索不出来了,怎么办?
今年上班后,好2019年3月初,上班后(年前大病一场 ,两个月没维护网站),发现公司网站所有收录都掉了,搜索公司名都不不到了,宝宝真是惊呆了. 有些人说是百度出了故障,有人说是百度算法. 说句 ...
- 5分钟学linux命令之split
情景介绍 平时工作中,我习惯使用rz从本地上传文件到服务器,sz从服务器下载文件到本地,但对传输文件大小有限制,例如排查线上jvm的问题,需要生成了dump文件,可能有10G大,超过了限制,怎么下载呢 ...
- Java String 对象,你真的了解了吗?
String 对象的实现 String对象是 Java 中使用最频繁的对象之一,所以 Java 公司也在不断的对String对象的实现进行优化,以便提升String对象的性能,看下面这张图,一起了解一 ...
- 如何用java实现数据脱敏
数据脱敏是什么意思呢? 数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并 ...
- Android之SOAP协议与WebService服务器交互,解决超时的问题
网络搜索大部分不能实际解决问题.特意将解决方法写下.创建MyAndroidHttpTransport 类 , package com.example.omhandroid.lib; import or ...
- maven 打包构建相关命令
1.命令 mvn clean package 依次执行clean.resources.compile.testResources.testCompile.test.jar(打包)等7个阶段. mvn ...
- Flask基础(06)-->视图常用逻辑
Flask基础(06)-->视图常用逻辑 返回json 重定向:url_for 自定义状态码 返回json:在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中 ...
- Java基础学习笔记(二) - 面向对象基础
面向对象 一.面向对象概述 面向对象思想就是在计算机程序设计过程中,参照现实事物,将事物的属性特征.行为特征抽象出来,描述成计算机时间的设计思想.面向对象思想区别于面向过程思想,强调的是通过调用对象的 ...
- hadoop之yarn详解(基础架构篇)
本文主要从yarn的基础架构和yarn的作业执行流程进行阐述 一.yarn的概述 Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管 ...