【c++|opencv】二、灰度变换和空间滤波---2.直方图和均衡化

news2025/1/16 11:06:17

every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog

0. 前言

图像直方图、直方图均衡化

1. 图像直方图

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

using namespace cv;
using namespace std;

int main(){
    Mat img, img_gray,hist;
    img = imread("/home/v/home.png");
    if (img.empty()){
        cout << "Could not open or find the image" << endl;
        return -1;
    }

    cvtColor(img, img_gray, COLOR_BGR2GRAY);
    imshow("img gray",img_gray);

    // 获取图像直方图
    int histSize = 256;
    float range[] = { 0, 256 };
    const float* histRange = { range };
    calcHist(&img_gray, 1, 0, Mat(), hist, 1, &histSize, &histRange, true, false);

    // 创建直方图
    int hist_h = 300;
    int hist_w = 512;
    int bin_w = hist_w / histSize; // 直方图的等级
    Mat hist_img(hist_h, hist_w, CV_8UC3, Scalar(0, 0, 0));

    // 绘制并显示直方图
    normalize(hist, hist, 0, hist_h, NORM_MINMAX, -1, Mat()); // 归一化直方图
    for (int i=1;i<histSize;i++){
        line(hist_img, Point(bin_w*(i-1), hist_h - cvRound(hist.at<float>(i-1))),
             Point(bin_w*(i), hist_h - cvRound(hist.at<float>(i))),
             Scalar(0, 0, 255), 2, 8, 0);
    }

    imshow("直方图",hist_img);
    waitKey(0);
    return 0;
}

在这里插入图片描述

2. 直方图均衡化

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

using namespace cv;
using namespace std;

int main(){
    Mat img,img_gray,img_enhanced;
    img = imread("/home/v/home.png");

    if (img.empty()){
        cout<<"Error"<<endl;
        return -1;
    }

    cvtColor(img,img_gray,COLOR_BGR2GRAY);
    imshow("gray",img_gray);

    equalizeHist(img_gray,img_enhanced); // 直方图均衡化
    imshow("enhanced",img_enhanced);
    
    waitKey(0);
    return 0;
}

在这里插入图片描述

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

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

相关文章

【多线程面试题十七】、如果不使用synchronized和Lock,如何保证线程安全?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;如果不使用synchronized…

文心一言 VS 讯飞星火 VS chatgpt (125)-- 算法导论10.6 6题

六、用go语言&#xff0c;任意有根树的左孩子右兄弟表示法中每个结点用到三个指针: leftchild、rightsibling 和parent。对于任何结点&#xff0c;都可以在常数时间到达其父结点&#xff0c;并在与其孩子数呈线性关系的时间内到达所有孩子结点。说明如何在每个结点中只使用两个…

军工工厂安全生产视频AI识别技术方案

一、需求分析 在国家政策、技术创新和企业发展需求转变等多个维度的共同驱动和协同下&#xff0c;特别是工业互联网作为“新基建”的提出&#xff0c;都在推动工业制造朝着数字化、网络化、智能化方向发展。军工装备制造行业承担着国民经济和国防建设的重要使命&#xff0c;构…

门面模式门面模式

目录 一.介绍 二.UML类图 未使用门面模式 使用门面模式 三.具体代码 业务代码 四.使用场景 一.介绍 门面模式&#xff08;Facade Pattern&#xff09;属于结构型模式。通过给多个复杂的子系统提供一个门面(高层接口)&#xff0c;使这些子系统更加容易的被访问&#xff0…

OpenLayers实战,OpenLayers实现TopoJson格式区划边界鼠标点击选中高亮显示,点击空白区域取消高亮

专栏目录: OpenLayers实战进阶专栏目录 前言 本章使用OpenLayers实现从vue项目中加载assets资源目录中的TopoJson格式数据,实现鼠标点击区划边界范围内时选并高亮显示,点击区划边界区域外取消高亮的功能。 本章是综合应用,为方便大家理解代码,拆分为简单的单一技术可以…

修改例程flags3_asyncio.py以解决RuntimeError错误

运行示例18-13 flags3_asyncio.py&#xff0c;程序报错如下&#xff1a; D:\Python\Python311\python.exe D:\fluentPy\chapter17_18\flags3_asyncio.py REMOTE site: https://www.fluentpython.com/data/flags/ Searching for 20 flags: from BD to VN 5 concurrent connecti…

nginx 转发数据流文件

1.问题描述 后端服务&#xff0c;从数据库中查询日志&#xff0c;并生成表格文件返回静态文件。当数据量几兆时&#xff0c;返回正常&#xff0c;但是超过几十兆&#xff0c;几百兆&#xff0c;就会超过网关的连接超时时间30秒。 时序图 这里面主要花费时间的地方在&#xff…

使用tensorflow创建自己的量化金融工具

介绍 在充满活力的金融领域,高频交易 (HFT) 已经成为游戏规则的改变者。高频交易能够在几毫秒内执行数千个订单,利用先进的算法和计算技术实时利用微小的价格差异。随着金融市场的不断发展,支持高频交易策略的工具和框架也必须不断发展。在这一背景下,TF Quant Finance (T…

AGENTTUNING:为LLM启用广义的代理能力

背景 翻译智谱这篇文章的初衷是&#xff0c;智谱推出了他们所谓的第三代大模型。这第三代的特点在哪呢&#xff1a;个人总结主要有一下几个点&#xff1a; 1.用特定prompt方式自闭环方式解决安全注入问题 2.增加了模型function call、agent能力 3.具备代码能力 4.做了能力…

excel从身份证号截取出生年月日

1、身份证号第7-14位&#xff0c;代表出生日期 2、用鼠标选中出生日期要存入的单元格&#xff0c;在编辑栏&#xff0c;输入函数公式&#xff1a;TEXT(MID(B3,7,8),"00-00-00")&#xff0c;然后按【CtrlEnter】结束确认&#xff0c;即可提取出身份证中的出生日期&am…

应急响应—挖矿病毒与勒索病毒

应急响应—挖矿病毒与勒索病毒 1. 前言2. 挖矿病毒2.1. 挖矿病毒传播方式2.2. 挖矿病毒危害2.3. 挖矿病毒防范2.4. 威胁情报中心 3. 勒索病毒3.1. 勒索病毒传播方式3.2. 勒索病毒危害3.3. 勒索病毒防范3.4. 勒索病毒家族及识别3.5. 解密工具下载3.5.1. 勒索病毒搜索平台3.5.2. …

群晖设置DDNS (服务商Godaddy被墙 DDNS-GO无法解析 采用自定义脚本方式完成DDNS更新)

起因&解决思路 事情的开始大概是这样的。。godaddy买了个域名&#xff0c;好好的用了半个月。。然后一直更新失败发现被狗东西墙了 在提一嘴DDNS-GO 解析失败原因 DDNS-GO必须要先向godaddy请求自己的IP地址[这里被墙卡住了]&#xff0c;然后比对&#xff0c;再决定是否上…

okhttp post请求 header post参数加密遇到的两个问题

如果你对于网络请求用了https后是否还有必要对参数加密有疑问可以看我上篇的文章&#xff1a;网络安全https 记得耐心看完&#xff0c;下面说问题&#xff1a; Caused by: java.lang.IllegalArgumentException: Unexpected char 0x0a 一开始以为是okhttp框架对特殊字符做了现在…

私有网络的安全保障,WorkPlus Meet内网视频会议助力企业高效会议

在企业内部沟通与协作中&#xff0c;视频会议成为了一种必不可少的沟通方式。然而&#xff0c;传统的互联网视频会议往往受制于网络不稳定因素&#xff0c;给企业带来不便与困扰。WorkPlus Meet作为一款专注内网视频会议的软件&#xff0c;致力于为企业打造高效、稳定的内网视频…

openpnp - code review - 开机对话框历史记录和贡献者名单

文章目录 openpnp - code review - 开机对话框历史记录和贡献者名单概述笔记D:\my_openpnp\openpnp_dev_2022_0801\src\main\java\org\openpnp\gui\AboutDialog.javaEND openpnp - code review - 开机对话框历史记录和贡献者名单 概述 偶然发现, 自己打包后的openpnp, 开机后…

js中获取json的值:使用 JSON.parse() 方法

比如json为&#xff1a;configs: "{"type":1}" 直接打印configs如下图 我们可以使用 JSON.parse() 方法将JSON格式字符串转换为 JavaScript 对象。 let a JSON.parse(configs) console.log(a) a打印出来如下图 此时就可以用a.type来得到1。 JSON.parse(…

配电柜监控原来还能这样?真的太爽啦!

在现代社会中&#xff0c;电力作为基础设施的一部分&#xff0c;扮演着至关重要的角色。为了确保电力系统的可靠性、安全性和高效性&#xff0c;配电柜监控系统变得越来越重要。 配电柜监控系统提供了实时数据和控制&#xff0c;有助于迅速识别并解决问题&#xff0c;从而降低停…

Linux 远程桌面软件

为您的 IT 管理员配备最好的 Linux 远程桌面软件至关重要。原因如下&#xff1f;Linux 是一个开源和免费的操作系统&#xff0c;它提供了一个非常灵活和可定制的软件内核。由于其开源性质&#xff0c;Linux 被认为是市场上最安全的操作系统之一&#xff0c;它拥有一个全球用户社…

【学习SonarQube记录】如何在windows上安装SonarQube及安装中文语言包

学习SonarQube记录 第一章 如何在windows上安装SonarQube及安装中文语言包 文章目录 学习SonarQube记录前言一、SonarQube是什么&#xff1f;二、安装步骤1.准备工作2.安装SonarQube 总结 前言 公司近期有代码完整性检测的需求&#xff0c;于是来学习相关工具SonarQube 一、S…

算法:二叉树难题和与STL相结合的练习题

文章目录 二叉树层序遍历原理二叉树的层序遍历 二叉树的最近公共祖先二叉搜索树和双向链表从前序与中序遍历序列构造二叉树从后序与中序遍历序列构造二叉树二叉树的非递归实现前序遍历中序遍历后序遍历 二叉树层序遍历原理 二叉树的层序遍历通常是借助队列来实现&#xff0c;可…