使用visual studio+OpenCV实验环境实现绘制一幅图像的直方图以及对这幅图像的灰度图像的直方图均衡化处理。
时间: 2024-04-05 07:34:18 浏览: 73
实现步骤如下:
1. 安装Visual Studio和OpenCV。
在官网下载Visual Studio和OpenCV,安装并配置好环境变量。
2. 创建工程。
打开Visual Studio,在菜单栏中选择“文件” -> “新建” -> “项目”,选择“Visual C++” -> “空项目”。
在解决方案资源管理器中右键单击项目名称,选择“属性”,在“VC++目录”下的“包含目录”和“库目录”中添加OpenCV的头文件和库文件路径。
在“链接器” -> “输入” -> “附加依赖项”中添加以下库文件:
- opencv_core330d.lib
- opencv_highgui330d.lib
- opencv_imgproc330d.lib
- opencv_imgcodecs330d.lib
3. 编写代码。
创建一个.cpp文件,将以下代码复制进去:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img, gray_img, hist_img;
img = imread("image.jpg");
if (img.empty())
{
cout << "Failed to load image!" << endl;
return -1;
}
// 转换为灰度图像
cvtColor(img, gray_img, COLOR_BGR2GRAY);
// 计算灰度图像的直方图
int histSize = 256;
float range[] = { 0, 256 };
const float* histRange = { range };
bool uniform = true, accumulate = false;
Mat hist;
calcHist(&gray_img, 1, 0, Mat(), hist, 1, &histSize, &histRange, uniform, accumulate);
// 绘制直方图
int hist_w = 512, hist_h = 400;
int bin_w = cvRound((double)hist_w / histSize);
hist_img = Mat(hist_h, hist_w, CV_8UC3, Scalar(0, 0, 0));
normalize(hist, hist, 0, hist_img.rows, 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(255, 0, 0), 2, 8, 0);
}
// 直方图均衡化处理
Mat eq_img;
equalizeHist(gray_img, eq_img);
// 显示图像和直方图
namedWindow("Original Image", WINDOW_NORMAL);
namedWindow("Gray Image", WINDOW_NORMAL);
namedWindow("Histogram", WINDOW_NORMAL);
namedWindow("Equalized Image", WINDOW_NORMAL);
imshow("Original Image", img);
imshow("Gray Image", gray_img);
imshow("Histogram", hist_img);
imshow("Equalized Image", eq_img);
waitKey(0);
return 0;
}
```
代码中读入一幅名为“image.jpg”的图像,将其转换为灰度图像并计算其直方图。然后绘制直方图,对灰度图像进行直方图均衡化处理,并显示原始图像、灰度图像、直方图和均衡化后的图像。
4. 运行程序。
编译并运行程序,即可看到结果。
阅读全文