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;
}
opencv 绘制坐标曲线_OpenCV手工实现灰度及RGB直方图相关推荐
- opencv 绘制图像轮廓
图像轮廓概念 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形. 谈起轮廓不免想到边缘,它们确实很像.简单的说,轮廓是连续的,边缘并不全都连续(下图).其实边缘主要是作为图像的特征使用,比如可以用 ...
- Opencv绘制HSV颜色直方图
一. 使用Opencv绘制HSV颜色直方图 所用的函数 cvCvtColor 可在: 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图 文章中查找相关介绍 所使用的结构体: CvHisto ...
- 使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果
使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果 1. 效果图 2. 源码 参考 这篇博客将使用python,opencv绘制调色板及圆形来模拟霓虹的渐变效果. 1. 效果图 可以构 ...
- python使用openCV把原始彩色图像转化为灰度图、使用矩阵索引的方式对数据数据进行剪裁(image cropping)
python使用openCV把原始彩色图像转化为灰度图.使用矩阵索引的方式对数据数据进行剪裁(image cropping) 目录
- Python使用openCV把原始彩色图像转化为灰度图、使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本)、基于自适应阈值预处理(adaptive thresholding)方法
Python使用openCV把原始彩色图像转化为灰度图.使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本).基于自适应阈值预处理(adaptive thresholding)方法 目录
- 计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~
计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~示例效果如下: 原图: 示例代码如下: #!/usr/bin/env python3import cv2def sort_contours(cnts ...
- OpenCV绘制等高线Contours的实例(附完整代码)
OpenCV绘制等高线Contour的实例 OpenCV绘制等高线Contour的实例 OpenCV绘制等高线Contour的实例 #include "opencv2/imgproc.hpp ...
- [Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- 详解用OpenCV绘制各类几何图形
本文分享自华为云社区<[Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形>,作者:eastmount. 一.绘制直线 在OpenCV中,绘制直线需要获取直线的起 ...
最新文章
- 汉芯一号、木兰语言再到天赐 OS,国产基础软件十年泣血,梦想何圆?
- html embed详解
- python视图函数是什么_python项目Django(视图函数)
- 回顾一些重要的CNN改进模型(你真的了解 Convolutional Neural Networks 么)
- DTS和PTS的解释
- Softmax 函数及其作用(含推导)
- java callable 详解_Java多线程详解(七)------Callable接口介绍
- 口语语言理解(SLU)最新资源库:综述、数据集、开源论文
- OC语言Block 续
- Postman安装与使用(网络请求神器)--post、get请求
- 酷狗音乐linux版_让父母也爱上音乐 酷狗音乐大字版成中老年人新宠
- 要做互联星空的SP接口,一点头绪都没有
- 【Python】os库介绍
- Android系统(2)---init.rc知识
- 新年春节海报模板|中国风艺术元素,就是不一样!
- Linux命令之查看文件内容
- 大数据该如何运行与分析
- Go实现 爬虫v0.2
- 关于word的格式规范
- 网络安全组(NSG)简介
热门文章
- mysql查找大小写_mysql查询不区分大小写
- apache license 2.0如何使用防止法律纠纷_go语言使用Swaggo详细教程
- Linux内存背后的那些神秘往事
- VS Code的Error: Running the contributed command: ‘_workbench.downloadResource‘ failed解决
- CVE-2021-41773 CVE-2021-42013 Apache HTTPd最新RCE漏洞复现 目录穿越漏洞
- mysql怎么复制信息_mysql关于复制的一些信息参考
- window.open不重复打开同一个名称的窗口_干货满满|Ctrl键的正确打开方式
- 【手把手 脑把脑】教会你使用idea基于MapReduce的统计数据分析(从问题分析到代码编写)
- asp.net core系列 48 Identity 身份模型自定义
- 前端Http协议缓存初解