opencv之直方图
来源:互联网 发布:golang开发是什么 编辑:程序博客网 时间:2024/06/08 04:38
直方图的绘制主要用到calcHist()函数 计算,normal归一化直方图。
基本思路:
1 分离图像通道RGB;
2 用calcHist计算每一通道的直方图
3 用normalize()来进行直方图的归一化。
4 用inline 画出每个通道的直方图。
#include<opencv2/opencv.hpp>#include<iostream>#include<math.h>using namespace cv;using namespace std;int main1(){ Mat img = imread("1.jpg"); if (img.empty()) { cout << "could not load....." << endl; return -1; } namedWindow("受损图",CV_WINDOW_AUTOSIZE); imshow("受损图", img); vector<Mat>bgr_img; split(img, bgr_img); const int channels[1] = { 0 }; const int bins[1] = { 256 }; float hranges[2] = { 0, 255 }; const float* ranges[1] = { hranges }; Mat b_hist, g_hist, r_hist; calcHist(&bgr_img[0], 1, channels, Mat(), b_hist, 1, bins, ranges); calcHist(&bgr_img[1], 1, channels, Mat(), g_hist, 1, bins, ranges); calcHist(&bgr_img[2], 1, channels, Mat(), r_hist, 1, bins, ranges); int hist_w = 512; int hist_h = 400; int bin_w = cvRound((double)hist_w / bins[0]); //返回和括号内部最接近的整数 Mat histimage = Mat::zeros(hist_h, hist_w, CV_8UC3); normalize(b_hist, b_hist, 0, histimage.rows, NORM_MINMAX, -1, Mat()); normalize(g_hist, g_hist, 0, histimage.rows, NORM_MINMAX, -1, Mat()); normalize(r_hist, r_hist, 0, histimage.rows, NORM_MINMAX, -1, Mat()); for (int i = 1; i < bins[0]; i++) { line(histimage, Point(bin_w*(i - 1), hist_h - cvRound(b_hist.at<float>(i - 1))), Point(bin_w*(i), hist_h - cvRound(b_hist.at<float>(i))), Scalar(255, 0, 0), 2, 8, 0); line(histimage, Point(bin_w*(i - 1), hist_h - cvRound(g_hist.at<float>(i - 1))), Point(bin_w*(i), hist_h - cvRound(g_hist.at<float>(i ))), Scalar(0, 255, 0), 2, 8, 0); line(histimage, Point(bin_w*(i - 1), hist_h - cvRound(r_hist.at<float>(i - 1))), Point(bin_w*(i), hist_h - cvRound(r_hist.at<float>(i))),Scalar(0,0,250),2,8,0); } namedWindow("sdsd",CV_WINDOW_AUTOSIZE); imshow("sdsd", histimage); waitKey(0); system("pause");}
直方图结果
解释
void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, booluniform=true, bool accumulate=false )
image 输入图像 注意是指针型
nimages 需要计算直方图的图像个数,可以有多个,但是一般只做一个图像的直方图,所以nimages=1;
channels 图像的通道,用一个数组表示,channels[1]={0},表示图像为灰度,一个通道。channels[3]={0,1,2},表示图片为彩色,三个通道。指针型。
mask 一个遮罩图像,用来指明那些像素进行计算,一般设置为Mat(),空图像。
hist 输出图像,
dims 输出图像的维度,灰度为1维,彩色为3维。
histSize 直方图横坐标的范围。
const float** ranges 二维数组,表示横坐标的区间范围。
void normalize(InputArray src,OutputArray dst, double alpha=1, doub lebeta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray() )
src 输入数组(图像)
dst 输出数组 (图像)
alpha 输出数组的最小值
lebeta 输出苏组的最大值
norm_type 归一化的方法
NORM_MINMAX 线性归一化 (绝对值的最大值)
NORM_INF:可能是归一化数组的C-范数
NORM_L1 : 归一化数组的L1-范数(绝对值的和)
NORM_L2: 归一化数组的(欧几里德)L2-范数
- opencv之直方图
- opencv 学习之 直方图
- OpenCV之直方图操作
- OpenCV之直方图拉伸
- opencv之图像直方图
- opencv之直方图caluHist函数
- Opencv之直方图计算calcHist
- 【opencv】之直方图的应用
- opencv学习之直方图绘制
- opencv 学习之直方图统计
- Opencv学习之图像直方图
- OpenCV之图像直方图计算
- OpenCV之直方图均衡化
- 【Opencv】【C++】 Opencv之calcHist() 计算直方图
- 【Opencv】【C++】 Opencv之calcHist() 计算直方图
- OpenCV学习(十六)之直方图均衡化并画出直方图
- OpenCV学习之直方图统计应用【转】
- opencv直方图之查表法,均衡化
- 多线程同步方法:临界区、事件、信号量、互斥对象
- Android 常见的几种解析XML 的方式
- Win8.1+VS2010环境下Qt4.8.7编译
- 白平衡算法
- 类型转换
- opencv之直方图
- 半平面求交
- java 模拟省略号分页
- mysql 创建用户并赋予用户权限
- phpcms分页查询
- 互联网架构师
- 抓取网页数据的几种方法
- RGB HSV 颜色空间 颜色距离 颜色相似度
- RGB HSV 颜色空间 颜色距离 颜色相似度