qt画个灰度直方图

2023-05-16

步骤

  1. 导入图表库
  2. 在ui界面新建一个wight窗口并提升为那个图表库的类型
  3. 写函数 输入参数是(图表,待处理图片)
  4. 图表的横轴是像素值 从0-255 纵轴是此灰度的像素点数量或者占比
  5. 所以要挨个判断图像里的每一个像素点 确认灰度值之后计数
  6. 然后用画图表的指令就可以了

我下面为什么引用了 Qt:OpenCV::Mat与Qt::QImage相互转换 的知识呢。。。因为一开始我参考的例程导入的是qimage的图片。我觉得mat可能好用一点。。。。结果发现我不用转,直接把图片导入成mat格式来用就好了,我个憨憨。

void MainWindow::graydata(QCustomPlot * plot, Mat img)
{
        double yrange=0;
        QVector<double>datax;
        QVector<double>datay;

        plot->clearGraphs();
        datay.resize(256);//向量扩容到256并填充为0  用来计数
        for (double i=0;i<256;i++) {
            datax.push_back(i);//x向量填0 1 ……255  作为横坐标
        }
        //QImage countimg=img->copy();
        unsigned char* data=img.data;//bits()直接返回图像第一个字节的地址
        int width = img.rows-50;
        int hight = img.cols-50;//图像边缘随手隔了50个像素不读
        for (int i=50;i<hight;i++) {
            for (int j=50;j<width;j++) {
                datay[data[i*hight+j]]+=1;
            }
        }
        //y轴最大值
        QVector<double>::iterator it;
        for (it=datay.begin();it!=datay.end();it++) {
            if(*it>yrange)
                yrange=*it;
        }


        plot->xAxis->setRange(-5,260);
        plot->yAxis->setRange(0,(int)yrange);

        QCPBars *bars=new QCPBars(plot->xAxis,plot->yAxis);

        bars->setData(datax,datay);
        bars->setPen(QColor(0,0,0));
        plot->replot();
}

QImage::Format这个方法可以查询图片的颜色类型
Qt:OpenCV::Mat与Qt::QImage相互转换

假设存在一个 3\times3 的图像,如下图所示,数组x 统计的是像素点的灰度级,数组y
统计的是具有该灰度级的像素个数。其中,灰度为1的像素共3个,灰度为2的像素共1个,灰度为3的像素共2个,灰度为4的像素共1个,灰度为5的像素共2个。
在这里插入图片描述
数字图像处理(15): 灰度直方图(matplotlib 和OpenCV
绘制直方图)

QCustomPlot简单介绍和例程
qt超强精美绘图控件 - QCustomPlot一览 及 安装使用教程

下面两个链接 第一个说qimage格式有对齐,mat格式不用对齐
第二个说 mat格式基本上不用对齐,但是也有需要对齐的时候。。。

在这里插入图片描述
把QImage转换为cv::Mat

例如保存BMP格式的图像时,BMP要求图像数据按四字节对齐,此时就需要对Mat中的数据进行补零
对齐方法就是在每一行尾部补零,零的个数可能是1~3个

但其实大部分时候,Mat的内存都是连续的,只有极个别时候需要担心这个问题,这里有说明,和这里

【学习OpenCV】Mat::data指针

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt画个灰度直方图 的相关文章

  • C语言用结构体实现串口协议

    C语言用结构体实现串口协议 需求 xff1a 我们串口发送是一个字节一个字节的 xff0c 我们制定的协议如下 xff1a 一帧协议10个字节 xff0c 放于buff 10 byte0 byte1 0x5555起始 byte2 value
  • 神经网络量化与反量化( int8与float32之间的转换)+C语言实现

    神经网络量化与反量化 xff08 int8与float32之间的转换 xff09 一 背景知识二 量化与反量化结果做对比 一 背景知识 量化并不是什么新知识 xff0c 我们在对图像做预处理时就用到了量化 回想一下 xff0c 我们通常会将
  • 分割字符串split函数的正确用法(切片)

    分割字符串split函数的正确用法 xff08 切片 xff09 split函数是将字符串分割为列表 函数原型 xff1a str span class token punctuation span span class token fun
  • 修改IP,开发板上配置ip 让开发板和电脑处于同一网段

    修改IP xff0c 开发板上配置ip 让开发板和电脑处于同一网段 一 设置临时IP二 设置动态IP三 设置静态IP 一 设置临时IP 板子和电脑通过网线直连 xff0c 设置成同一网段 xff0c 但是每次重启板子后 xff0c 都需要i
  • 电路设计_阅读英文数据手册并没有想象的那么难

    说明书的正文究竟包含哪几部分 xff0c 应根据不同产品的具体情况来确定 xff08 1 xff09 Release Date 检查手册发布的日期 xff0c 是预备版还是修正版 xff1b xff08 2 xff09 General De
  • 用C语言实现卷积操作(包含单通道单卷积和多通道多卷积以及维度的转换)

    用C语言实现卷积 单通单卷积多通道多卷积维度转换 xff08 多维转一维 xff09 完整代码实现 xff1a 单通单卷积 卷积其实就是个点成相加的过程 原理图如下 xff1a 关键代码实现 xff1a span class token c
  • 基于深度学习的车牌识别项目的APP部分之图像预处理(一):C语言读取bmp图像信息

    车牌识别项目之图像预处理一 xff1a C语言读取bmp图像信息 一 什么是bmp文件二 BMP格式结构1 文件信息头2 图像描述信息块3 BMP调色板4 BMP图像数据区 像素存储 像素数据 位图像素格式 三 原理实现 xff1a 1 打
  • 基于深度学习的车牌识别项目的APP部分之图像预处理(二):C语言实现bmp的二值化处理

    基于深度学习的车牌识别项目的APP部分之图像预处理 xff08 二 xff09 xff1a C语言实现bmp的二值化处理 一 二值化概念二 代码实现三 运行结果 xff1a 1 图像是8位深度的运行结果 xff1a 2 图像是16位深度的运
  • rviz和tf树报错修改

    跟着这个博主进行多机器人仿真 xff0c 一直出错 xff0c 有点崩溃了 ROS仿真笔记之 基于gazebo的ROS多机器人仿真 gwpscut的博客 CSDN博客 TF REPEATED DATA warnings ROS Answer
  • 港科大GVINS编译与运行教程

    GVINS GVINS是香港科技大学沈劭劼团队开源的基于因子图优化的GNSS 视觉 惯导紧耦合多传感器组合导航软件 GVINS是一个基于非线性优化的系统 xff0c 它将 GNSS 原始测量与视觉和惯性信息紧密融合 xff0c 以实现实时和
  • 硬件结构——(6) 软中断

    1 中断是什么 xff1f 在计算机中 xff0c 中断是 系统用来响应硬件设备请求 的一种机制 操作系统收到 硬件的中断请求后 xff0c 会打断正在执行的进程 xff0c 然后调用内核中的 中断处理程序 来响应请求 中断是 种 异步的事
  • C++将类序列化和反序列化到共享内存

    这里用模板泛化一下 template lt typename T gt int saveToShm const T amp obj key t key 61 gen shm key int shmId 61 shmget key sizeo
  • C++使用rapidjson进行类的序列化与反序列化

    目录 序列化 amp 反序列化单个对象序列化反序列化使用示例 序列化 amp 反序列化对象列表 C 43 43 中可以使用第三方库来实现将类序列化成JSON文件 xff0c 以及读取JSON文件内容反序列化为类对象 这里使用rapidJso
  • c++用vector实现定长队列

    目录 queue实现vector实现 我们可以用queue或vector实现定长队列 xff0c 但是如果我们有遍历定长队列的需求的话 xff0c 使用queue不是一个好的选择 xff0c 因为queue本身不支持直接访问元素 queue
  • c++判断文件是否存在

    可以使用C 43 43 的文件流来判断文件是否存在 以下是一个简单的函数 xff0c 可以通过文件名判断文件是否存在 xff1a span class token macro property span class token direct
  • 相机内外参数的意义

    1 内参数 xff1a 由于相机坐标系使用的是毫米制的单位 xff0c 而图像平面使用的像素为单位 内参数的作用就是在这两个坐标系之间进行线性的变化 相机光轴中心Z轴方向与像平面交点称为投影中心 xff0c 其坐标为 xff0c 其单位为像
  • C++实现读写分离的双缓冲buffer

    目录 1 双缓冲区 读写分离2 后台线程定时更新数据3 类设计完整代码cache cppcache hmain cppmakefile 读写分离的双缓冲buffer有以下好处 xff1a 提高了并发读写的效率 xff1a 在多线程环境下 x
  • 返回引用与返回值与返回std::move(obj)

    返回引用与返回值相比 返回引用与返回值相比有以下几个好处 xff1a 减少内存开销 xff1a 返回值需要在函数内部创建一个临时对象 xff0c 然后将该对象的副本返回给调用者 这个过程需要分配内存 复制数据等操作 xff0c 会增加内存开
  • error: non-member function ‘XXX::IsValid(const T&)’ cannot have cv-qualifier

    这个错误提示表明你定义的函数 IsValid 是一个非成员函数 xff0c 并且带有 const 限定符 在 C 43 43 中 xff0c 非成员函数不能带有 const 限定符 xff0c 因为它们没有隐式的 this 指针 xff0c
  • c++使用regex报错regex_error

    原本写了个同时识别IPv4和IPv6地址的C 43 43 函数 xff1a span class token macro property span class token directive hash span span class to

随机推荐

  • c++实现日志类(写入logfile)

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • c++中以类对象作为key用于unordered_map、map,以及std::tie技巧使用

    我有一个类 span class token keyword class span span class token class name UserRegion span span class token punctuation span
  • std::set_difference用法

    std set difference 是 C 43 43 STL 中的一个算法 xff0c 用于计算两个有序范围之间的差集 xff0c 并将结果存储到另一个有序范围中 std set difference 的函数签名如下 xff1a spa
  • __builtin_xxx指令学习【1】__builtin_expect

    builtin expect是GCC编译器提供的一个内置函数 xff0c 用于告诉编译器一个分支的执行概率 xff0c 以便编译器在生成机器码时进行优化 它的语法如下 xff1a span class token function buil
  • __builtin_xxx指令学习【2】__builtin_prefetch

    builtin prefetch是GCC编译器提供的一个内置函数 xff0c 用于预取数据到CPU的缓存中 xff0c 以便提高程序的执行效率 它的语法如下 xff1a builtin prefetch const void addr in
  • __builtin_xxx指令学习【3】__builtin_popcount & __builtin_popcountll

    builtin popcount是GCC和Clang编译器提供的一个内置函数 xff0c 用于计算一个整数中二进制位为1的个数 该函数的使用背景是在一些位运算和计算机视觉等领域中 xff0c 需要对二进制数据进行处理和分析 xff0c 而二
  • 当arduino遇到树莓派(usb串口)

    arduino与树莓派cm4通过usb串口连接 xff1a 问题描述 前两天尝试了很久arduino和树莓派连接 终于找到了连接的方法 xff01 可恶 这是在简书找到的过程 主要是先在树莓派端导serial包 pip install se
  • Linux的rc.local自启动服务

    Linux的rc local自启动服务 网址 xff1a http blog csdn net 21aspnet article details 6826659 Linux有自己一套完整的启动体系 xff0c 抓住了linux启动的脉络 x
  • __builtin_xxx指令学习【4】__builtin_clz&__builtin_ctz & __builtin_clzll & __builtin_ctzll

    builtin clz是GCC和Clang编译器提供的一个内置函数 xff0c 用于计算一个整数的二进制表示中 xff0c 从最高位开始连续的0的个数 该函数的使用背景是在一些位运算和计算机视觉等领域中 xff0c 需要对二进制数据进行处理
  • __builtin_xxx指令学习【5】__builtin_bswap16/32/64

    builtin bswap16 32 64是GCC和Clang编译器提供的内置函数 xff0c 用于交换一个整数的字节顺序 其中 xff0c builtin bswap16用于交换一个16位整数的字节顺序 xff0c builtin bsw
  • 【Python】@cache装饰器使用 (依赖cachetools)

    介绍 cachetools 是一个 Python 缓存库 xff0c 可以用于缓存函数的计算结果 xff0c 以提高程序的性能和响应速度 使用 cachetools 可以避免重复计算 减少网络请求 降低数据库负载等问题 xff0c 从而提高
  • Python常见装饰器使用(实用向)

    目录 1 96 64 staticmethod 96 2 96 64 classmethod 96 3 96 64 classmethod 96 与 96 64 staticmethod 96 比较4 96 64 property 96 5
  • 【C++】std::transform、std::back_inserter使用

    std transform函数可以用于对一个序列中的每个元素进行转换 xff0c 并将结果存储到另一个序列中 们需要传递三个参数 xff1a 源序列的起始迭代器 源序列的结束迭代器和目标序列的起始迭代器 此外 xff0c 我们还需要传递一个
  • std::inner_product与std::accumulate初始值设置踩坑

    std inner product函数可以用于计算两个序列的内积 在这个函数中 xff0c 我们需要传递四个参数 xff1a 两个源序列的起始迭代器 一个初始值和一个二元函数对象 std inner product函数将对两个源序列中的每个
  • 树莓派无法连接vnc,树莓派 vnc viewer 显示 cannot currently show the desktop 的解决方法

    最近新买了一块树莓派4B xff0c 正常启动ssh xff0c vnc服务 但vnc viewer上却显示黑屏 cannot currently show the desktop 在网上查找了许多解决方法 xff0c 都不能用 但后来调整
  • 'gbk' codec can't encode character '\xa0' XXX解决方法

    在运行py文件时 xff0c 出现 UnicodeEncodeError gbk codec can t encode character xa0 in position XXX 让人摸不着头脑 注意这三个方面 xff0c 一般都能解决 1
  • 基于stm32cubeIDE学习can通信

    can通信 TO DO 1 CAN FilterTypeDef 中的SlaveStartFilterBank 为从过滤器配置 xff0c 用来选择从过滤器的寄存器号 当选择双CAN模式的时候 xff0c 这个参数要跟CAN2的filtern
  • jetson nano 的GPIO使用

    依次输入以下指令 python span class token comment 进入python编程界面 span span class token operator gt gt span span class token operato
  • 多态的基础语法

    1 向上转型和向下转型的概念 向上转型 自动转型 xff1a 子类 gt 父类 当我们是用父类引用指向子类对象的时候 xff0c 系统会自动向上转型 向下转型 强制转型 xff1a 父类 gt 子类 当父类引用指向子类对象时 xff0c 父
  • qt画个灰度直方图

    步骤 导入图表库在ui界面新建一个wight窗口并提升为那个图表库的类型写函数 输入参数是 xff08 图表 xff0c 待处理图片 xff09 图表的横轴是像素值 从0 255 纵轴是此灰度的像素点数量或者占比所以要挨个判断图像里的每一个