Opencv学习笔记C++绘制灰度直方图攻略
Opencv是一个常用的开源计算机视觉库,提供了一系列用于图像处理的工具和算法。在图像处理领域,灰度直方图是一种常用的工具,可以用来分析图像的颜色分布情况。本文将介绍如何使用Opencv库绘制图像的灰度直方图。
准备工作
在使用Opencv库绘制灰度直方图之前,需要先安装Opencv库和C++编译器。可以在官网下载安装包进行安装。安装完成后,在编译器中配置好Opencv库的路径,即可开始编写代码。
绘制灰度直方图的步骤
- 读取图像
使用Opencv提供的imread函数,可以读取图像。读取后的图像保存在Mat类型的变量中。
Mat img = imread("test.jpg", IMREAD_GRAYSCALE);
- 计算直方图
使用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);
- 绘制直方图
使用Opencv提供的绘图函数可以将计算出的直方图可视化。这里使用了Opencv提供的直方图绘制函数plotHistogram,它接收一个图像窗口名称和计算出的直方图向量作为参数,可以自动绘制并显示直方图。
Mat histImg = Mat::zeros(256, 256, CV_8UC1);
plotHistogram(hist, histImg);
imshow("Histogram", histImg);
- 显示图像和直方图
最后,使用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技术站