当前位置: 首页 > news >正文

OPENCV C++(二)直方图+分离颜色通道+画圆画线画矩形

分离RGB彩图颜色通道 也就是把每种分量的亮度图提出来

vector<Mat> channels;split(image1, channels);Mat R = channels.at(0);Mat G = channels.at(1);Mat B = channels.at(2);

这样R,G,B每个图就是这个图的颜色分量图了

图片的克隆,深拷贝!

Mat image1_copy = image1.clone();

申明一个点操作

Point pt;pt.x = 10;pt.y = 10;

这样就可以得到一个点,你可以把它当作圆心来进行画圆操作

circle(image1_copy,pt, 6, CV_RGB(255, 0, 0), -1, 8, 0);

图,点,半径,颜色,-1代表填充1代表不填充,8和0都是默认参数

也可以申明两个点,进行画线操作。

line(image1_copy, Point(20,20), pt2, CV_RGB(0, 255, 0), 1, 8, 0);

这里也可以直接在函数里面写Point(20,20)也代表了一个点,但就不能在其他地方用这个了。

申明一个矩形的操作,也可以叫矩形的ROI

Rect rect;rect.x = 10;rect.y = 10;rect.width = 90;rect.height = 90;rectangle(image1_copy, rect, CV_RGB(243, 125, 254), 1, 8, 0);


下面是直方图统计图的画法

统计各个通道的RGB函数 网上的学习

void showHist(Mat& img, Mat& dst)
{//1、创建3个矩阵来处理每个通道输入图像通道。//我们用向量类型变量来存储每个通道,并用split函数将输入图像划分成3个通道。vector<Mat>bgr;split(img, bgr);//2、定义直方图的区间数int numbers = 256;//3、定义变量范围并创建3个矩阵来存储每个直方图float range[] = { 0,256 };const float* histRange = { range };Mat b_hist, g_hist, r_hist;//4、使用calcHist函数计算直方图int numbins = 256;calcHist(&bgr[0], 1, 0, Mat(), b_hist, 1, &numbins, &histRange);calcHist(&bgr[1], 1, 0, Mat(), g_hist, 1, &numbins, &histRange);calcHist(&bgr[2], 1, 0, Mat(), r_hist, 1, &numbins, &histRange);//5、创建一个512*300像素大小的彩色图像,用于绘制显示int width = 800;int height = 600;Mat histImage(height, width, CV_8UC3, Scalar(0, 0, 0));//6、将最小值与最大值标准化直方图矩阵normalize(b_hist, b_hist, 0, height, NORM_MINMAX);normalize(g_hist, g_hist, 0, height, NORM_MINMAX);normalize(r_hist, r_hist, 0, height, NORM_MINMAX);//7、使用彩色通道绘制直方图int binStep = cvRound((float)width / (float)numbins);  //通过将宽度除以区间数来计算binStep变量for (int i = 1; i < numbins; i++){line(histImage,Point(binStep * (i - 1), height - cvRound(b_hist.at<float>(i - 1))),Point(binStep * (i), height - cvRound(b_hist.at<float>(i))),Scalar(255, 0, 0));line(histImage,Point(binStep * (i - 1), height - cvRound(g_hist.at<float>(i - 1))),Point(binStep * (i), height - cvRound(g_hist.at<float>(i))),Scalar(0, 255, 0));line(histImage,Point(binStep * (i - 1), height - cvRound(r_hist.at<float>(i - 1))),Point(binStep * (i), height - cvRound(r_hist.at<float>(i))),Scalar(0, 0, 255));}dst = histImage;return;
}

其中值得学习的函数有:

创建画布:

int width = 800;int height = 600;Mat histImage(height, width, CV_8UC3, Scalar(0, 0, 0));

归一化高度宽度

normalize(b_hist, b_hist, 0, height, NORM_MINMAX);normalize(g_hist, g_hist, 0, height, NORM_MINMAX);normalize(r_hist, r_hist, 0, height, NORM_MINMAX);

对直方图函数处理后的每个统计直方图大小的处理

height - cvRound(b_hist.at<float>(i - 1)

因为画布是从上往下数的

计算灰度图的直方统计量函数

int numbers = 256;//3、定义变量范围并创建3个矩阵来存储每个直方图float range[] = { 0,256 };const float* histRange = { range };Mat b_hist, g_hist, r_hist;//4、使用calcHist函数计算直方图int numbins = 256;calcHist(&bgr[0], 1, 0, Mat(), b_hist, 1, &numbins, &histRange);calcHist(&bgr[1], 1, 0, Mat(), g_hist, 1, &numbins, &histRange);calcHist(&bgr[2], 1, 0, Mat(), r_hist, 1, &numbins, &histRange);

统计各个通道的RGB函数 自己的编写

int h = R.rows;int w = R.cols;int hisgramR[256] = {0};for (int j = 0; j < h; j++) {for (int i = 0; i < w; i++) {hisgramR[R.at<uchar>(j, i)]= hisgramR[R.at<uchar>(j, i)]+1;}}

针对于每个像素进行统计

int nHistWidth = 256;int nHistHeight =400;Mat matHistImage(nHistHeight, nHistWidth, CV_8UC3, Scalar(255, 255, 255));for (int i = 0; i < 256; i++) {line(matHistImage, Point(i, nHistHeight-1), Point(i, nHistHeight-hisgramR[i]*400/5000), CV_RGB(255,0, 0), 1, 8, 0);}

制造画布,且归一化可能不太标准,找了一个比较大的数进行相乘除

相关文章:

OPENCV C++(二)直方图+分离颜色通道+画圆画线画矩形

分离RGB彩图颜色通道 也就是把每种分量的亮度图提出来 vector<Mat> channels;split(image1, channels);Mat R channels.at(0);Mat G channels.at(1);Mat B channels.at(2); 这样R,G,B每个图就是这个图的颜色分量图了 图片的克隆&#xff0c;深拷贝&#xff01; Mat…...

SpringBoot(2.7.x)中使用PageHelper

如何在SpringBoot中使用PageHelper 先添加依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.12</version> </dependency>SpringBoot 2.6.x…...

【HarmonyOS】API9网络buffer图片加载

【引言】 HarmonyOS中加载网络图片常用的方法是直接给Image组件添加图片的网络地址&#xff0c;申请网络权限ohos.permission.INTERNET后就可以通过url加载对应的图片了&#xff0c;如HarmonyOS官网中的写法&#xff1a; Image(https://www.example.com/example.JPG) 【问题概…...

【前端实习生备战秋招】—HTML 和 CSS面试题总结(二)

【前端实习生备战秋招】—HTML 和 CSS面试题总结&#xff08;二&#xff09; 1.有哪些方式可以对一个 DOM 设置它的 CSS 样式&#xff1f; 外部样式表&#xff0c;引入一个外部 css 文件内部样式表&#xff0c;将 css 代码放在 <head> 标签内部内联样式&#xff0c;将 c…...

操作系统知识点总结

操作系统知识点总结: 第一章:操作系统概述 1.1操作系统的概念: ​ 操作系统是一种系统软件,与其他系统软件和应用软件不同,它有自己的基本特征。它的四大基本特征也就是并发,共享,虚拟,异步。 1.2操作系统的特征(四大基本特征): 并发: 这里我们要理解什么是并发,什么是…...

(C++) 多线程之生产者消费者问题

文章目录 前言CodeCode运行效果 分解讲解main()class ProducerConsumerProblemproduce()consumer() END 前言 生产者消费者问题_百度百科 (baidu.com) 生产者消费者问题 &#xff08;英语&#xff1a;Producer-consumer problem&#xff09;&#xff0c;也称有限缓冲问题&…...

【C语言学习】逃逸字符(转义字符)

逃逸字符&#xff08;转义字符&#xff09; 1.\" 双引号 \" printf("请分别输入身高的英尺和英寸&#xff0c;""如输入\"5 7\"表示5英尺7英寸:");这里的"\就是双引号的作用&#xff0c;因为在双引号里面直接用双引号无意义&…...

开发手册|Java后端开发规范重点条目整理

Ps&#xff1a;部分熟知的开发规范未收录在本文中&#xff01; 一、编程规约 1.1 命名风格 代码中的命名严禁使用拼音与英文混合的方式 alibaba / taobao / youku / hangzhou 等国际通用的名称可视同英文 类名使用大驼峰的形式命名&#xff0c;例如 UpperCameCase 方法、参数…...

c++11 标准模板(STL)(std::basic_ofstream)(二)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ifstream : public std::basic_istream<CharT, Traits> 类模板 basic_ifstream 实现文件流上的高层输入操作。它将 std::basic_istrea…...

k8s概念-pv和pvc

回到目录 kubernetes存储卷的分类太丰富了,每种类型都要写相应的接口与参数才行&#xff0c;这就让维护与管理难度加大。 persistenvolume(PV) 是配置好的一段存储(可以是任意类型的存储卷) 也就是说将网络存储共享出来,配置定义成PV。 PersistentVolumeClaim(PVC)是用户pod使…...

python算法指南程序员经典,python算法教程pdf百度云

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;你也能看懂的python算法书 pdf&#xff0c;python算法教程这本书怎么样&#xff0c;现在让我们一起来看看吧&#xff01; 给大家带来的一篇关于算法相关的电子书资源&#xff0c;介绍了关于算法、详解、算法基础方面的内…...

微服务使用步骤

Maven的依赖冲突解决方案&#xff1a; 路径最短原则配置优先原则破坏规则则使用排除 SpringBoot场景启动器starter的开发流程 c3p0-spring-boot-starter自定义场景启动器test-c3p0调用自定义场景启动器SpringBoot自动装配SpringBoot应用启动原理nacos服务治理 安装 启动bin/s…...

Ubuntu 23.04 作为系统盘的体验和使用感受

1.为啥主系统装了Ubuntu 由于公司发电脑了&#xff0c;我自己也有一台台式电脑&#xff0c;然后也想去折腾一下Ubuntu&#xff0c;就把自己的笔记本装成Ubuntu系统了&#xff0c; 我使用的是23.04的桌面版&#xff0c;带图形化界面的。我准备换回Windows 11了&#xff08;因为…...

百分点科技跻身中国智慧应急人工智能解决方案市场前三

近日&#xff0c; 全球领先的IT市场研究和咨询公司IDC发布了《中国智慧应急解决方案市场份额&#xff0c;2022》报告&#xff0c;数据显示&#xff0c;2022年中国智慧应急整体市场为104亿元人民币。其中&#xff0c;智慧应急人工智能解决方案子市场备受关注&#xff0c;百分点科…...

vscode如何退出/切换 github 账号

退出/切换 github 账号 左下角点击头像按钮&#xff0c;选择注销&#xff0c;然后再重新登录...

maven发布到中央仓库

创建账号 https://issues.sonatype.org 【第二步】登录申请新项目 右上角点击Create&#xff0c;Project选择第一项&#xff0c;有的时候带不出来第二个New Project&#xff0c;可以再选一次Project的选项。...

C#IEnumberable<>

在C#中&#xff0c;IEnumerable<>是一个泛型接口&#xff0c;用于表示一个可枚举的集合。它定义了一个用于遍历集合元素的枚举器&#xff08;enumerator&#xff09;。通过实现IEnumerable<>接口&#xff0c;我们可以使用foreach语句或LINQ查询等方式来迭代访问集合…...

Flink非对齐checkpoint原理(Flink Unaligned Checkpoint)

Flink非对齐checkpoint原理&#xff08;Flink Unaligned Checkpoint&#xff09; 为什么提出Unaligned Checkpoint&#xff08;UC&#xff09;&#xff1f; 因为反压严重时会导致Checkpoint失败&#xff0c;可能导致如下问题 恢复时间长-服务效率低非幂等和非事务会导致数据…...

Linux crontab命令:循环执行定时任务(详解)

crontab 命令的基本格式如下&#xff1a; [rootlocalhost ~]# crontab [选项] [file] file 指的是命令文件的名字&#xff0c;表示将 file 作为 crontab 的任务列表文件并载入 crontab&#xff0c;若在命令行中未指定文件名&#xff0c;则此命令将接受标准输入&#xff08;键盘…...

Linux系统jenkins+newman+postman持续集成环境搭建

1、首先安装nodejs 下载nodejs压缩包&#xff0c;下载地址&#xff1a;nodejs官网下载 建议不用下载最新的&#xff0c;我这里用的是推荐的v12.18版本 下载和解压命令 wget https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.xz解压安装包&#xff08;记得没有z&…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...