opencv c++图像中各灰度级的像素个数直方图均衡化代码
时间: 2023-06-03 07:07:26 浏览: 81
以下是使用 OpenCV C++ 实现图像的直方图均衡化的代码示例:
```C++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("lena.jpg", IMREAD_GRAYSCALE); // 读取灰度图
if (img.empty()) // 检查是否成功读取
{
cout << "Failed to read image" << endl;
return 0;
}
Mat hist_eq;
equalizeHist(img, hist_eq); // 直方图均衡化
imshow("Original Image", img);
imshow("Histogram Equalized Image", hist_eq);
waitKey(0);
return 0;
}
```
在这个例子中,我们使用 `imread()` 函数来读取一个灰度图像。然后,我们使用 `equalizeHist()` 函数来执行直方图均衡化。最后,我们使用 `imshow()` 函数显示原始图像和直方图均衡化后的图像。最后,我们使用 `waitKey()` 函数等待用户按下任意键。
相关问题
C++表示灰度图像的直方图均衡化处理不用OpenCV
灰度图像的直方图均衡化是一种常用的图像增强技术,可以增强图像的对比度,使得图像更加清晰。下面是一种实现灰度图像的直方图均衡化的 C++ 代码,不需要使用 OpenCV 库:
```c++
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// 读取图像数据
ifstream infile("image.raw", ios::binary);
unsigned char* imgData = new unsigned char[256 * 256];
infile.read(reinterpret_cast<char*>(imgData), 256 * 256);
// 计算原始图像的直方图
int hist[256] = {0};
for (int i = 0; i < 256 * 256; i++) {
hist[imgData[i]]++;
}
// 计算灰度级映射函数
int map[256];
int sum = 0;
for (int i = 0; i < 256; i++) {
sum += hist[i];
map[i] = static_cast<int>((sum * 255.0f) / (256 * 256) + 0.5f);
}
// 对图像进行直方图均衡化
for (int i = 0; i < 256 * 256; i++) {
imgData[i] = map[imgData[i]];
}
// 将均衡化后的图像数据保存到文件
ofstream outfile("equalized_image.raw", ios::binary);
outfile.write(reinterpret_cast<char*>(imgData), 256 * 256);
// 释放内存
delete[] imgData;
return 0;
}
```
上述代码中,我们首先从文件中读取了一个大小为 256x256 的灰度图像数据,然后计算了原始图像的直方图。接着,我们根据直方图计算出灰度级映射函数,该映射函数可以将原始图像中的灰度级映射到均衡化后的灰度级。最后,我们对图像进行直方图均衡化,并将均衡化后的图像数据保存到文件中。
需要注意的是,上述代码中的灰度图像数据是以二进制文件的形式存储的,每个像素点占用一个字节。如果你的灰度图像数据是以其他格式存储的,比如 BMP、PNG 等,你需要先将其转换成二进制格式,再使用上述代码进行直方图均衡化。
opencv 直方图均衡化 c++
在OpenCV中,直方图均衡化是一种用于增强图像对比度的方法。它通过重新分配图像的灰度级来拉伸图像的直方图,使得图像中的像素值尽可能均匀地分布在整个灰度级范围内。这可以通过使用cv::equalizeHist函数来实现。
以下是使用OpenCV进行直方图均衡化的C代码示例:
```
#include <opencv2/opencv.hpp>
int main() {
// 读取图像
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
// 进行直方图均衡化
cv::Mat equalizedImage;
cv::equalizeHist(image, equalizedImage);
// 显示原始图像和均衡化后的图像
cv::imshow("Original Image", image);
cv::imshow("Equalized Image", equalizedImage);
cv::waitKey(0);
return 0;
}
```
请注意,您需要将示例中的"image.jpg"替换为您要进行直方图均衡化的实际图像路径。