opencv学习笔记C++绘制灰度直方图

Opencv学习笔记C++绘制灰度直方图攻略

Opencv是一个常用的开源计算机视觉库,提供了一系列用于图像处理的工具和算法。在图像处理领域,灰度直方图是一种常用的工具,可以用来分析图像的颜色分布情况。本文将介绍如何使用Opencv库绘制图像的灰度直方图。

准备工作

在使用Opencv库绘制灰度直方图之前,需要先安装Opencv库和C++编译器。可以在官网下载安装包进行安装。安装完成后,在编译器中配置好Opencv库的路径,即可开始编写代码。

绘制灰度直方图的步骤

  1. 读取图像

使用Opencv提供的imread函数,可以读取图像。读取后的图像保存在Mat类型的变量中。

Mat img = imread("test.jpg", IMREAD_GRAYSCALE);
  1. 计算直方图

使用Opencv提供的calcHist函数,可以计算图像的灰度直方图。该函数接收一个Mat类型的变量和一些其他参数,返回一个向量,表示图像的灰度直方图。

int histSize = 256;
float range[] = {0, 256};
const float* ranges[] = {range};
MatND hist;
calcHist(&img, 1, 0, Mat(), hist, 1, &histSize, ranges, true, false);
  1. 绘制直方图

使用Opencv提供的绘图函数可以将计算出的直方图可视化。这里使用了Opencv提供的直方图绘制函数plotHistogram,它接收一个图像窗口名称和计算出的直方图向量作为参数,可以自动绘制并显示直方图。

Mat histImg = Mat::zeros(256, 256, CV_8UC1);
plotHistogram(hist, histImg);
imshow("Histogram", histImg);
  1. 显示图像和直方图

最后,使用Opencv提供的imshow函数可以显示图像和直方图。

imshow("Image", img);
imshow("Histogram", histImg);

示例说明

以下提供两个示例,分别展示如何绘制单张图片和多张图片的灰度直方图。

示例一:绘制单张图片的灰度直方图

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
    Mat img = imread("test.jpg", IMREAD_GRAYSCALE);

    int histSize = 256;
    float range[] = {0, 256};
    const float* ranges[] = {range};
    MatND hist;
    calcHist(&img, 1, 0, Mat(), hist, 1, &histSize, ranges, true, false);

    Mat histImg = Mat::zeros(256, 256, CV_8UC1);
    plotHistogram(hist, histImg);

    imshow("Image", img);
    imshow("Histogram", histImg);
    waitKey(0);
    return 0;
}

运行上述代码可以显示一张名为test.jpg的图片和其对应的灰度直方图。

示例二:绘制多张图片的灰度直方图

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
    Mat img1 = imread("test1.jpg", IMREAD_GRAYSCALE);
    Mat img2 = imread("test2.jpg", IMREAD_GRAYSCALE);

    int histSize = 256;
    float range[] = {0, 256};
    const float* ranges[] = {range};
    MatND hist1, hist2;
    calcHist(&img1, 1, 0, Mat(), hist1, 1, &histSize, ranges, true, false);
    calcHist(&img2, 1, 0, Mat(), hist2, 1, &histSize, ranges, true, false);

    Mat histImg1 = Mat::zeros(256, 256, CV_8UC1);
    Mat histImg2 = Mat::zeros(256, 256, CV_8UC1);
    plotHistogram(hist1, histImg1);
    plotHistogram(hist2, histImg2);

    namedWindow("Image 1", WINDOW_NORMAL);
    namedWindow("Histogram 1", WINDOW_NORMAL);
    namedWindow("Image 2", WINDOW_NORMAL);
    namedWindow("Histogram 2", WINDOW_NORMAL);

    imshow("Image 1", img1);
    imshow("Histogram 1", histImg1);
    imshow("Image 2", img2);
    imshow("Histogram 2", histImg2);

    waitKey(0);
    return 0;
}

运行上述代码可以显示两张名为test1.jpg和test2.jpg的图片及其对应的灰度直方图。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:opencv学习笔记C++绘制灰度直方图 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • k8s中pod使用详解(云原生kubernetes)

    下面我将为您讲解一下“k8s中pod使用详解(云原生kubernetes)”的完整攻略,让您更好地了解该主题。 1.什么是Pod Pod是Kubernetes API对象中最小的可部署资源。 Pod是指一组紧密关联的容器集合,它们共享网络空间和存储卷等资源。Pod可以由一个或多个容器组成,它们共享存储、网络等资源,可以在同一节点上或跨多个节点运行。 例如,您…

    人工智能概览 2023年5月25日
    00
  • OpenCV半小时掌握基本操作之傅里叶变换

    OpenCV半小时掌握基本操作之傅里叶变换 什么是傅里叶变换 傅里叶变换是一种将信号从时域转换到频域的数学变换,用于分析周期性信号和非周期性信号的频谱。在图像处理领域,傅里叶变换可以用于图像增强、压缩、滤波等操作。 OpenCV中的傅里叶变换 在OpenCV中,傅里叶变换可以使用函数cv2.dft()和cv2.idft()来进行。cv2.dft()用于将图像…

    人工智能概论 2023年5月25日
    00
  • nginx+tomcat 通过域名访问项目的实例

    下面就是详细讲解“nginx+tomcat 通过域名访问项目”的完整攻略。 环境说明 服务器环境: CentOS 7(64位) nginx 1.16.1 tomcat 8.5.50 域名:example.com 目标项目:project 思路 通过nginx作为反向代理服务器,将访问example.com的请求转发到tomcat的特定端口,从而访问到项目。 …

    人工智能概览 2023年5月25日
    00
  • 利用node.js+mongodb如何搭建一个简单登录注册的功能详解

    下面我来详细讲解利用node.js+mongodb如何搭建一个简单登录注册的功能的攻略。 基本流程 首先,我们需要搭建node.js的环境,安装对应的依赖包,包括MongoDB、Express等。然后,我们可以创建一个项目,创建一个包含login和register两个路由的express应用。在处理控制器中,我们可以使用mongoose库来操作mongodb…

    人工智能概论 2023年5月25日
    00
  • docker容器因报错无法启动问题的检查及修复容器错误并重启

    针对“docker容器因报错无法启动问题的检查及修复容器错误并重启”的完整攻略,下面是具体步骤。 1. 检查容器错误 当你遇到无法启动的Docker容器时,首先要查询相应的日志并检查容器中的问题。以下是一些有效的检查方法: (1) 使用docker logs命令查看容器日志 docker logs <容器名或ID> 该命令将显示该容器的日志记录,…

    人工智能概览 2023年5月25日
    00
  • 专业干货!分享一个特别好用的搜索框必须考虑的五个方面

    谢谢你的提问。下面是搜索框必须考虑的五个方面的完整攻略。 1. 明确搜索目标 搜索框必须考虑的第一个方面就是明确搜索目标。搜索框应当明确提示用户要搜索什么内容。这需要对搜索的目标进行正确的描述,以便用户快速找到他们想要的信息。 例如,在一个商城网站上,用户在搜索框中输入“红色电视”,搜索框应该明确搜索“红色电视”这个关键字,并展示相关的商品信息,而不是整个电…

    人工智能概览 2023年5月25日
    00
  • 详解Nginx几种常见实现301重定向方法上的区别

    详解Nginx几种常见实现301重定向方法上的区别 什么是301重定向 301重定向是一种常用的网站重定向方式,它是通过HTTP协议将用户请求的URL指向到新的URL,以达到网站流量迁移、搜索引擎优化等目的。 Nginx如何实现301重定向 在Nginx中实现301重定向,一般有以下几种常见的方法: 1. 修改server配置段 通过在Nginx serve…

    人工智能概览 2023年5月25日
    00
  • 浅谈Django 页面缓存的cache_key是如何生成的

    下面是针对“浅谈Django 页面缓存的cache_key是如何生成的”的完整攻略,希望对您有所帮助: 简介 Django 是一个流行的 Python Web 框架,具有完善的开发文档和强大的社区支持。在 Django 中,缓存机制是提高 Web 性能的重要手段之一,其中页面缓存是应用最为广泛的缓存方式之一,Django 内置了 cache_page 装饰器…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部