opencv直方图规定化库函数
时间: 2023-10-28 13:06:55 浏览: 105
opencv直方图规定化库函数是equalizeHist,它用于提高图像的质量。该函数的函数原型如下:
void equalizeHist(InputArray src, OutputArray dst)
示例代码如下:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int artc, char** argv) {
Mat src = imread("C:/Users/Dell/Desktop/picture/butterfly.jpg");
if (src.empty()) {
printf("could not load image...\n");
return -1;
}
// 灰度直方图规定化
Mat gray, dst;
cvtColor(src, gray, COLOR_BGR2GRAY);
equalizeHist(gray, dst);
// 输出结果
namedWindow("input", WINDOW_AUTOSIZE);
imshow("input", src);
imshow("equalizeHist", dst);
waitKey(0);
return 0;
}
```
相关问题
实验内容:直方图均衡化、直方图规定化 1、将“原图.bmp”转换成灰度图像,并进行直方图均衡化 2、采用直方图规定化算法,对“原图.bmp”RGB三个通道的直方图分别改成与“参考图像.bmp”一致。 要求: 1、自行c++代码实现,不使用opencv提供的直方图均衡化、规定化函数
实验内容涉及图像处理中的两个基本操作:直方图均衡化和直方图规定化。
**1. 直方图均衡化**:
直方图均衡化是一种增强图像对比度的技术,通过改变像素值的概率分布,使得整个图像的亮度范围更均匀。首先,你需要读取灰度图像"原图.bmp",然后计算每个灰度级的像素频率,接着构建一个新的灰度级映射表,使得低灰度区域对应新空间的高概率,高灰度区域对应低概率,从而达到均衡的效果。以下是简单的步骤:
```cpp
// 代码示例
#include <iostream>
#include <fstream>
int main() {
// 读取灰度图像
// ... (代码略)
// 计算直方图
int histogram[256] = {0}; // 假设8位灰度图像
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
histogram[gray_values[y * width + x]]++;
}
}
// 均衡化处理
// ... (填充直方图并生成新的灰度值映射)
// 应用新的灰度映射到图像
// ... (代码略)
return 0;
}
```
**2. 直方图规定化**:
直方图规定化则需要针对RGB三个通道分别处理,先分别计算每个通道的直方图,然后找到参考图像"参考图像.bmp"的相应直方图,将当前图像的直方图调整至与参考图像相同。这通常涉及到寻找累积分布函数(CDF)的交叉点,将当前图像像素映射到这个交叉点上。这里假设你已经有了找到交叉点的算法:
```cpp
// 对RGB通道分别处理
for (int i = 0; i < 3; ++i) {
// ... (计算当前通道的直方图,找出交叉点,创建映射)
// 应用规定化的映射到通道像素
// ... (代码略)
}
return 0;
```
注意,这只是一个大致的框架,实际代码中还需要处理文件I/O、图像数据的读写以及边界条件等细节。同时,上述代码并未提供完整的库函数支持,对于文件读写和图像处理,你可能需要用到如`std::ifstream`和一些图像处理库(如FreeImage、Magick++等)。
python opencv 计算灰度直方图
在Python中,使用OpenCV库计算图像的灰度直方图,你可以按照以下步骤操作:
1. 首先,确保已安装了OpenCV库(cv2)。如果还没有安装,可以使用pip安装:
```
pip install opencv-python
```
2. 导入所需的库函数:
```python
import cv2
import numpy as np
```
3. 加载图片并转换为灰度图像:
```python
img = cv2.imread('image_path.jpg', cv2.IMREAD_GRAYSCALE)
```
`cv2.IMREAD_GRAYSCALE`参数告诉OpenCV将图像加载为灰度模式。
4. 计算灰度直方图:
```python
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
```
`hist`是一个数组,包含了各个灰度级的像素数;`bins`是对应的灰度值范围。
5. 可视化直方图:
```python
plt.plot(bins[:-1], hist, 'r')
plt.xlabel('灰度值')
plt.ylabel('频率')
plt.title('灰度直方图')
plt.show()
```
这里假设已经导入了matplotlib.pyplot来进行图表绘制。
阅读全文