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

#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;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

onnx 测试_用于ONNX的TensorRT后端

用于ONNX的TensorRT后端解析ONNX模型以使用TensorRT执行。另请参阅TensorRT文档。有关最近更改的列表&#xff0c;请参见changelog。支持的TensorRT版本Master分支上的开发适用于具有完整维度和动态架构shape支持的TensorRT 7.2.1的最新版本。对于TensorRT的早期版本&#xff0…

paddlepaddle测试安装_百度paddlepaddle深度学习7日入门-CV疫情特辑心得

正值疫情严重之日&#xff0c;作为一名研究生被迫待在家里学习&#xff0c;手头的科研项目也严重受挫。。。偶然间&#xff0c;看到微信公众号发布这门课&#xff0c;马上报名&#xff0c;入坑&#xff01;&#xff01;&#xff01;瞬间疫情其间有学习的目标了。。该课程学习依…

apache目录 vscode_VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)

VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)安装如下两个主要扩展即可&#xff0c;这两个扩展已关联java项目开发主要使用的maven、springboot等所需要的扩展。开始步骤&#xff1a;在 Visual Studio Code 中打开扩展视图(CtrlShiftX)。输入“java”搜索商店扩展…

android dp转px的公式_Android特效专辑——自定义不一样的Toast

大家都知道&#xff0c;Android的控件有时候很难满足我们的需求&#xff0c;所以我们需要自定义View。自定义的方式很多&#xff0c;有继承原生控件也有直接自定义View的&#xff0c;今天写的是自定义的Toast&#xff0c;当然&#xff0c;这个不是复写Toast,是换一种表达形式&a…

code iban 是有什么组成_深入浅出Zookeeper(四):客户端的请求在服务器中经历了什么...

作者 泊浮目 沃趣科技高级研发工程师出品 沃趣科技1. 前言当我们向zk发出一个数据更新请求时&#xff0c;这个请求的处理流程是什么样的&#xff1f;zk又是使用了什么共识算法来保证一致性呢&#xff1f;带着这些问题&#xff0c;我们进入今天的正文。2. 设计模式&#xff1…

Centos7: 配置IO调度

今天有同事问我个问题&#xff1a;“CentOS7如何修改IO默认的调度”&#xff0c;我这里简单整理下如何调整的方法&#xff1a; 1、查看CentOS7下IO支持的调度 1234[rootkvm02 ~]# dmesg | grep -i scheduler [ 16.900459] io scheduler noop registered[ 16.900473] io sch…

启动activemq_「Java」 - SpringBoot amp; ActiveMQ

一、消息队列消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合、异步消息、流量削锋等问题&#xff0c;实现高性能、高可用、可伸缩和最终一致性架构&#xff0c;是大型分布式系统不可缺少的中间件。目前在生产环境中使用较多的消息队列有ActiveMQ、Rabbit…

永不休眠怎么设置_电脑休眠后应该怎样唤醒?

可能有朋友会碰到这种情况&#xff0c;电脑屏幕显示正在休眠&#xff0c;而且不停的转圈&#xff0c;这是怎么回事&#xff0c;如何唤醒?下面让坚哥为大家分析一下吧。电脑开机显示休眠一般根据以下几种情况进行处理&#xff1a;1、正常电脑休眠&#xff1a;一般的是按一下电源…

配置ssl证书_Mysql配置ssl证书

本环境基于mysql5.6配置&#xff0c;通过openssl生成证书进行配置一、确认环境信息1、查看数据库版本mysql> select version();-----------| version() |-----------| 5.6.36 |-----------2、查看数据库是否支持ssl配置mysql> show variables like have%ssl%;-----------…

echarts散点图中大小_echarts在地图上绘制散点图(任意点)

项目需求&#xff1a;在省份地图上绘制散点图&#xff0c;散点位置不一定是哪个城市或哪个区县&#xff0c;即任意点通过查询官网文档&#xff0c;找到一个与需求类似的demo&#xff1a;&#xff0c;更改代码&#xff0c;将中国地图替换为省份地图&#xff0c;省份地图的js代码…

如何让图片充满excel单元格_如何在Excel单元格建立下拉菜单

对于一些常用的数据我们往往会希望能够尽量快速的输入&#xff0c;下拉菜单就是一个最简单的解决办法。那么如何实现下拉菜单呢&#xff1f;跟随以下步骤&#xff0c;建立属于自己的下拉菜单吧&#xff01;如何建立下拉菜单&#xff1f;一、确定内容&#xff1a;在单元格中&…

pgsql中float4导致java程序精度丢失_Java基础系列02

注释Java中支持三种注释&#xff1a;1.单行注释以//开始换行结束。2.多行注释以/*开始&#xff0c;以*/结束。3.说明注释以/**开始&#xff0c;以*/结束。关键字关键字&#xff1a;是指在程序中&#xff0c;Java已经定义好的单词&#xff0c;具有特殊含义。例如上篇文章中Hello…

python地理位置聚类_python – 用于聚类地理位置数据的DBSCAN

我有一个纬度和经度对的数据帧.这是我的数据帧外观.order_lat order_long0 19.111841 72.9107291 19.111342 72.9083872 19.111342 72.9083873 19.137815 72.9140854 19.119677 72.9050815 19.119677 72.9050816 19.119677 72.9050817 19.120217 72.9071218 19.120217 72.90712…

用idea建立jsp项目_用idea创建maven项目,配置tomcat详解

用idea创建maven项目&#xff0c;配置tomcat详解&#xff0c;电脑上得有jdk1.7&#xff0c;或者1.8&#xff0c;然后就是maven3.x吧&#xff0c;再有就是tomcat7以上下面就直接开始看图啦&#xff1a;这个我刚刚开始没注意细看&#xff0c;原来web app 的骨架有2个呢&#xff0…

求立方根_初一数学立方根考点详解,立足基础,把握题型,学会方法

初一数学实数部分&#xff0c;平方根和立方根这两部分的知识点比较的基础&#xff0c;但是考试中却是经常会考&#xff0c;并且有很多的“陷阱”&#xff0c;也是让学生猝不及防&#xff0c;今天我和同学们继续学习交流立方根的知识点&#xff0c;通过详解考点&#xff0c;帮助…

ctf音频yinxie_ctf-图片隐写术

文件隐藏常见文件头尾jpg 文件头FFD8FFE0 文件尾FFD9png 文件头89504E470D0A1A0A 文件尾AE426082gif 文件头47494638 文件尾003Bzip 文件头504B0304 文件尾rar 文件头Rar! 文件尾7zip 文件头7z集 文件尾文件分析工具binwalk,kali中集成工具&#xff0c;用于分析文件中所包含的内…

mysql负责均衡读写分离_MySQL读写分离之负载均衡

mysql官方文档中有这么一句话&#xff1a;MySQL Proxy is currently an Alpha release and should not be used within production environments.So。。。使用haproxy来做这些事&#xff0c;以下仅供参考&#xff1a;环境配置master 192.168.1.106 master1s…

mysql使用技巧_MySQL使用不得不看的几个小技巧

程序中写入的一行行的SQL语句&#xff0c;如果使用了一些优化小技巧&#xff0c;定能达到事半功倍的效果。1. 优化你的MySQL查询缓存在MySQL服务器上进行查询&#xff0c;可以启用高速查询缓存。让数据库引擎在后台悄悄的处理是提高性能的最有效方法之一。当同一个查询被执行多…

mysql oracle 数据类型转换_Mysql与Oracle之间的数据类型转换

&lbrack;转&rsqb;MYSQL 与 Oracle 之间的数据类型转换

rad linux下安装mysql_Linux(CentOS或RadHat)下MySQL源码安装

MySQL 5.6开始&#xff0c;需要使用g进行编译。cmake &#xff1a;MySQL 5.5开始&#xff0c;使用cmake进行工程管理&#xff0c;cmake需要2.8以上版本。bison &#xff1a;MySQL语法解析器需要使用bison进行编译。ncurses-devel &#xff1a;用于终端操作的开发包。zlib …