#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

Mat img1, img2, img3, img_gray, map_x, map_y;

char win1[] = "window1";
char win2[] = "window2";
char win3[] = "window3";
char win4[] = "window4";

int threshold_value = 0;
int max_value = 255;
RNG rng(12345);

int Demo_Histogram();

int index = 0;

//Remap
int Demo_Histogram()
{
  img1 = imread("D://images//1//9.jpg");
  if (img1.empty())
  {
    cout << "could not load image..." << endl;
    return 0;
  }
  imshow(win1, img1);

  vector<Mat> bgr_planes;

  //把多通道图像分为多个单通道图像
  split(img1,bgr_planes);
  //imshow(win2,bgr_planes);
  int histSize = 256;
  float range[] = {0,256};

  const float *histRanges = {range};
  Mat b_hist, g_hist, r_hist;
  calcHist(&bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRanges, true, false);
  calcHist(&bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRanges, true, false);
  calcHist(&bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRanges, true, false);

  int hist_h = 400;
  int hist_w = 512;
  int bin_w = hist_w / histSize;
  Mat histImage(hist_w,hist_h,CV_8UC3,Scalar(0,0,0));

  //归一化处理
  normalize(b_hist, b_hist, 0, hist_h, NORM_MINMAX, -1, Mat());
  normalize(g_hist, g_hist, 0, hist_h, NORM_MINMAX, -1, Mat());
  normalize(r_hist, r_hist, 0, hist_h, NORM_MINMAX, -1, Mat());

  for (int i=1;i<histSize;i++)
  {
    line(histImage,
      Point((i-1)*bin_w,hist_h-cvRound(b_hist.at<float>(i-1))),
      Point((i)*bin_w, hist_h - cvRound(b_hist.at<float>(i))),
      Scalar(255,0,2),2,LINE_AA);

    line(histImage,
      Point((i - 1)*bin_w, hist_h - cvRound(g_hist.at<float>(i - 1))),
      Point((i)*bin_w, hist_h - cvRound(g_hist.at<float>(i))),
      Scalar(0, 255, 2), 2, LINE_AA);

    line(histImage,
      Point((i - 1)*bin_w, hist_h - cvRound(r_hist.at<float>(i - 1))),
      Point((i)*bin_w, hist_h - cvRound(r_hist.at<float>(i))),
      Scalar(0, 0, 255), 2, LINE_AA);
  }

  imshow(win2, histImage);
  return 0;
}

int main()
{
  Demo_Histogram();

  waitKey(0);
  return 0;
}

Opencv 图片直方图的更多相关文章

  1. 【计算机视觉】OpenCV中直方图处理函数简述

    计算直方图calcHist 直方图是对数据集合的统计 ,并将统计结果分布于一系列提前定义的bins中.这里的数据不只指的是灰度值 ,统计数据可能是不论什么能有效描写叙述图像的特征. 如果有一个矩阵包括 ...

  2. opencv——图像直方图与反向投影

    引言 在图像处理中,对于直方图这个概念,肯定不会陌生.但是其原理真的可以信手拈来吗? 本文篇幅有点长,在此列个目录,大家可以跳着看: 分析图像直方图的概念,以及opencv函数calcHist()对于 ...

  3. 基于opencv图片切割

    基于opencv图片切割为n个3*3区块 工作原因,切割图片,任务急,暂留调通的源码,留以后用. package com.rosetta.image.test; import org.opencv.c ...

  4. Opencv图片明暗处理

    Opencv图片明暗处理 #include <iostream> #include <opencv2/opencv.hpp> using namespace std; usin ...

  5. Python OpenCV图片转视频 工具贴(三)

    Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...

  6. python opencv 图片缺陷检测(讲解直方图以及相关系数对比法)

    一.利用直方图的方式进行批量的图片缺陷检测(方法简单) 二.步骤(完整代码见最后) 2.1灰度转换(将原图和要检测对比的图分开灰度化) 灰度化的作用是因为后面的直方图比较需要以像素256为基准进行相关 ...

  7. opencv图像直方图均衡化及其原理

    直方图均衡化是什么有什么用 先说什么是直方图均衡化,通俗的说,以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图.新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化. 图像直方图均 ...

  8. opencv —— equalizeHist 直方图均衡化实现对比度增强

    直方图均匀化简介 从这张未经处理的灰度图可以看出,其灰度集中在非常小的一个范围内.这就导致了图片的强弱对比不强烈. 直方图均衡化的目的,就是把原始的直方图变换为在整个灰度范围(0~255)内均匀分布的 ...

  9. opencv 比较直方图方式 进行人脸检测对比

    完整opencv(emgucv)人脸.检测.采集.识别.匹配.对比 //成对几何直方图匹配               public static string MatchHist()         ...

随机推荐

  1. Springboot的优点和实现

    一 优点 1.创建独立的Spring应用程序 2.嵌入式的Tomcat,不需要部署war包 3.简化Maven配置 4.自动配置Spring 5.提供生产就绪型功能,如指标,健康检查,和外部配置 6. ...

  2. 1.Python3关于文件的操作

    1.写了一个简单的Demo,就是向txt文本写入内容,最初代码如下: file = open("D:/Users/nancy/python.txt","wb") ...

  3. 初识php,开发环境的配置

    PHP开发环境配置和第一个PHP程序(phpStudy+PhpStorm) 第一步 下载phpStudy 首先,到phpStudy官网上下载最新的phpStudy版本. 第二步 安装phpStudy ...

  4. 紫金桥OPC接口使用技巧

    OPC接口使用技巧 OPC接口是由OPC基金会制定的,基于DCOM技术的,用于控制系统软件之间进行数据通讯的接口规范.由于其开放性和高效性,现在已被广泛应用于自动化控制领域及生产信息管理中.紫金桥软件 ...

  5. linux 查看字体

    fc-list   #字体列表 fc-list :lang=zh  #中文字体 fc-match -v "字体名" # 查看字体详情

  6. postman断言的方法

    1.在test添加断言 2.检查response的body中是否包含字符串: tests["Body matches string"] = responseBody.has(&qu ...

  7. 【转】使用 JMeter 完成常用的压力测试

    本文介绍了 JMeter 相关的基本概念.并以 JMeter 为例,介绍了使用它来完成最常用的三种类型服务器,即 Web 服务器.数据库服务器和消息中间件,压力测试的方法.步骤以及注意事项.      ...

  8. limesurvey的问卷类型

  9. CDH5.10 添加kafka服务

    简介: CDH的parcel包中是没有kafka的,kafka被剥离了出来,需要从新下载parcel包安装.或者在线安装,但是在线安装都很慢,这里使用下载parcel包离线安装的方式. PS:kafk ...

  10. 在linux下使用debugfs恢复rm删除的文件

    原理主要是删除的文件并没有实际上从硬盘上摸去,只是inode索引删除了相关的信息,因此只要找到刚删除文件的block上,就可以恢复已经删除的文件. 以下方法在ext3的文件系统上测试通过,ext2的没 ...