OpenCV学习笔记(26)灰度直方图 练习

2024-09-02 19:32

本文主要是介绍OpenCV学习笔记(26)灰度直方图 练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

calcHist函数和minMaxLoc函数的参数学习与使用

#include <opencv2/core/core.hpp>  
#include<opencv2/highgui/highgui.hpp>  
#include"opencv2/imgproc/imgproc.hpp"  
#include <iostream>  
#include <math.h>
using namespace cv;
Mat srcImage;
Mat grayImage;
Mat histImage;   //灰度直方图//画一个白色矩形作为面板在灰度直方图
void fill_white(Mat image)
{rectangle(image, Point(0, 0), Point(image.cols, image.rows), Scalar(255, 255, 255), CV_FILLED);
}void histgram()
{//定义变量,calcHist函数的参数准备Mat dstHist;  //输出的结果存储的空间 int dims = 1;  //1维float midRanges[] = { 0,256 };  //用于指出直方图每一维的每个bin(份)的上下界范围数组的数组const float*ranges[] = { midRanges };int size = 256;   //数值一共分为256组,也就是柱条的数目int channels = 0;  int nScale = 2;calcHist(&grayImage, 1, &channels, Mat(), dstHist, dims, &size, ranges);//calcHist  函数调用结束后,dstHist变量中将储存了 直方图的信息  用dstHist的模版函数 at<Type>(i)得到第i个柱条的值  //at<Type>(i, j)得到第i个并且第j个柱条的值 //因为任何一个图像的某个像素的总个数,都有可能会有很多,会超出所定义的图像的尺寸,针对这种情况,先对个数进行范围的限制  //先用 minMaxLoc函数来得到计算直方图后的像素的最大个数  double HistMaxValue;minMaxLoc(dstHist, 0, &HistMaxValue, 0, 0);histImage = Mat::zeros(Size(255*nScale, 150), CV_8UC3);//定义灰度直方图页面的大小fill_white(histImage);//白底for (int i = 0; i < 256; i++){float fHistValue = dstHist.at<float>(i);//像素为i的直方块大小int nRealHeight = cvRound((fHistValue / HistMaxValue) * 150);  //要绘制的高度rectangle(histImage, Point(i*nScale, 254), Point((i + 1)*nScale - 1, 150- nRealHeight),Scalar(0,0,0),CV_FILLED);//从左往右一条一条的绘制~}imshow("灰度直方图", histImage);
}bool readImage()
{srcImage = imread("102.jpg");imshow("原图", srcImage);if (!srcImage.data){std::cout << "fail to load image" << std::endl;return 0;}
}void rgb_to_gray()
{grayImage.create(srcImage.size(), CV_8UC3);cvtColor(srcImage, grayImage, CV_BGR2GRAY);imshow("灰度图", grayImage);
}
void main()
{readImage();rgb_to_gray();histgram();waitKey();
}


这篇关于OpenCV学习笔记(26)灰度直方图 练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130864

相关文章

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性