#include #include#include#include#include#include#include#include#include

using namespacecv;using namespacestd;//单通道图片直方图绘制

void drawHist(vectornums)

{

Mat hist= Mat::zeros(600, 800, CV_8UC3);

auto Max= max_element(nums.begin(), nums.end());//max迭代器类型,最大数目

putText(hist, "Histogram", Point(150, 100), FONT_HERSHEY_DUPLEX, 1, Scalar(255, 255, 255));//*********绘制坐标系************// Point o = Point(100, 550);

Point x= Point(700, 550);

Point y= Point(100, 150);//x轴

line(hist, o, x, Scalar(255, 255, 255), 2, 8, 0);//y轴

line(hist, o, y, Scalar(255, 255, 255), 2, 8, 0);//********绘制灰度曲线***********// Point pts[256];//生成坐标点

for (int i = 0; i < 256; i++)

{

pts[i].x= i * 2 + 100;

pts[i].y= 550 - int(nums[i]*(300.0/(*Max)));//归一化到[0, 300]//显示横坐标

if ((i + 1) % 16 == 0)

{string num = format("%d", i + 1);

putText(hist, num, Point(pts[i].x,570), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255));

}

}//绘制线

for (int i = 1; i < 256; i++)

{

line(hist, pts[i- 1], pts[i], Scalar(0, 255, 0), 2);

}//显示图像

imshow("直方图",hist);

}//三通道图片直方图绘制

void drawHist(vector &r, vector &g, vector &b)

{

Mat hist= Mat::zeros(600, 800, CV_8UC3);

putText(hist,"Histogram", Point(150, 100), FONT_HERSHEY_DUPLEX, 1, Scalar(255, 255, 255));//*********绘制坐标系************// Point o = Point(100, 550);

Point x= Point(700, 550);

Point y= Point(100, 150);//x轴

line(hist, o, x, Scalar(255, 255, 255), 2, 8, 0);//y轴

line(hist, o, y, Scalar(255, 255, 255), 2, 8, 0);//********绘制灰度曲线***********// auto Max_r =max_element(r.begin(), r.end());

auto Max_g=max_element(g.begin(), g.end());

auto Max_b=max_element(b.begin(), b.end());

Point pts[3][256];//生成坐标点

for (int i = 0; i < 256; i++)

{

pts[0][i].x = i * 2 + 100;

pts[0][i].y = 550 - int(r[i] * (300.0 / (*Max_r)));//归一化到[0, 300]

pts[1][i].x = i * 2 + 100;

pts[1][i].y = 550 - int(g[i] * (300.0 / (*Max_g)));//归一化到[0, 300]

pts[2][i].x = i * 2 + 100;

pts[2][i].y = 550 - int(b[i] * (300.0 / (*Max_b)));//归一化到[0, 300]//显示横坐标

if ((i + 1) % 16 == 0)

{string num = format("%d", i + 1);

putText(hist, num, Point(pts[0][i].x, 570), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255));

}

}//绘制线

for (int i = 1; i < 256; i++)

{

line(hist, pts[0][i - 1], pts[0][i], Scalar(255, 0, 0), 2);

line(hist, pts[1][i - 1], pts[1][i], Scalar(0, 255, 0), 2);

line(hist, pts[2][i - 1], pts[2][i], Scalar(0, 0, 255), 2);

}//显示图像

imshow("直方图", hist);

}//灰度直方图计算

void calHist(const stringimg)

{

Mat src, grey;//读取图象

src =imread(img);if (!src.data)

{

cout<< "Image:" + img + "读取失败" <

}//先转为灰度图

cvtColor(src, grey, COLOR_BGR2GRAY);

imshow("灰度图", grey);//计算各灰度级像素个数

vector nums(256);for (int i = 0; i < grey.rows; i++)

{

uchar* p = grey.ptr(i);for (int j = 0; j < grey.cols; j++)

{

nums[p[j]]++;

}

}

drawHist(nums);

}//多通道直方图计算

void calHist(const string img, intpattern)

{

Mat src, grey;//读取图象

src =imread(img);if (!src.data)

{

cout<< "Image:" + img + "读取失败" <

}

imshow("原图像",src);//计算各灰度级像素个数

vector r(256, 0);

vector g(256, 0);

vector b(256, 0);for (int i = 0; i < src.rows; i++)

{

uchar* p = src.ptr(i);for (int j = 0; j < src.cols; j++)

{

r[p[j* 3 + 0]]++;

g[p[j* 3 + 1]]++;

b[p[j* 3 + 2]]++;

}

}

drawHist(r, g, b);

}intmain()

{string img = "D:\\trashBox\\testIMG\\tiger.jpg";

calHist(img);//计算灰度直方图

calHist(img, 0);//计算三色直方图

waitKey(0);return 0;

}

opencv 绘制坐标曲线_OpenCV手工实现灰度及RGB直方图相关推荐

  1. opencv 绘制图像轮廓

    图像轮廓概念 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形. 谈起轮廓不免想到边缘,它们确实很像.简单的说,轮廓是连续的,边缘并不全都连续(下图).其实边缘主要是作为图像的特征使用,比如可以用 ...

  2. Opencv绘制HSV颜色直方图

    一. 使用Opencv绘制HSV颜色直方图 所用的函数 cvCvtColor 可在: 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图 文章中查找相关介绍 所使用的结构体: CvHisto ...

  3. 使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果

    使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果 1. 效果图 2. 源码 参考 这篇博客将使用python,opencv绘制调色板及圆形来模拟霓虹的渐变效果. 1. 效果图 可以构 ...

  4. python使用openCV把原始彩色图像转化为灰度图、使用矩阵索引的方式对数据数据进行剪裁(image cropping)

    python使用openCV把原始彩色图像转化为灰度图.使用矩阵索引的方式对数据数据进行剪裁(image cropping) 目录

  5. Python使用openCV把原始彩色图像转化为灰度图、使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本)、基于自适应阈值预处理(adaptive thresholding)方法

    Python使用openCV把原始彩色图像转化为灰度图.使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本).基于自适应阈值预处理(adaptive thresholding)方法 目录

  6. 计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~

    计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~示例效果如下: 原图: 示例代码如下: #!/usr/bin/env python3import cv2def sort_contours(cnts ...

  7. OpenCV绘制等高线Contours的实例(附完整代码)

    OpenCV绘制等高线Contour的实例 OpenCV绘制等高线Contour的实例 OpenCV绘制等高线Contour的实例 #include "opencv2/imgproc.hpp ...

  8. [Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  9. 详解用OpenCV绘制各类几何图形

    本文分享自华为云社区<[Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形>,作者:eastmount. 一.绘制直线 在OpenCV中,绘制直线需要获取直线的起 ...

最新文章

  1. 汉芯一号、木兰语言再到天赐 OS,国产基础软件十年泣血,梦想何圆?
  2. html embed详解
  3. python视图函数是什么_python项目Django(视图函数)
  4. 回顾一些重要的CNN改进模型(你真的了解 Convolutional Neural Networks 么)
  5. DTS和PTS的解释
  6. Softmax 函数及其作用(含推导)
  7. java callable 详解_Java多线程详解(七)------Callable接口介绍
  8. 口语语言理解(SLU)最新资源库:综述、数据集、开源论文
  9. OC语言Block 续
  10. Postman安装与使用(网络请求神器)--post、get请求
  11. 酷狗音乐linux版_让父母也爱上音乐 酷狗音乐大字版成中老年人新宠
  12. 要做互联星空的SP接口,一点头绪都没有
  13. 【Python】os库介绍
  14. Android系统(2)---init.rc知识
  15. 新年春节海报模板|中国风艺术元素,就是不一样!
  16. Linux命令之查看文件内容
  17. 大数据该如何运行与分析
  18. Go实现 爬虫v0.2
  19. 关于word的格式规范
  20. 网络安全组(NSG)简介

热门文章

  1. mysql查找大小写_mysql查询不区分大小写
  2. apache license 2.0如何使用防止法律纠纷_go语言使用Swaggo详细教程
  3. Linux内存背后的那些神秘往事
  4. VS Code的Error: Running the contributed command: ‘_workbench.downloadResource‘ failed解决
  5. CVE-2021-41773 CVE-2021-42013 Apache HTTPd最新RCE漏洞复现 目录穿越漏洞
  6. mysql怎么复制信息_mysql关于复制的一些信息参考
  7. window.open不重复打开同一个名称的窗口_干货满满|Ctrl键的正确打开方式
  8. 【手把手 脑把脑】教会你使用idea基于MapReduce的统计数据分析(从问题分析到代码编写)
  9. asp.net core系列 48 Identity 身份模型自定义
  10. 前端Http协议缓存初解