用vs opencv写代码实现直方图规定化
时间: 2023-11-07 19:24:45 浏览: 31
好的,这里是用 Visual Studio 和 OpenCV 实现直方图规定化的代码:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("lena.jpg", IMREAD_GRAYSCALE);
if (src.empty())
{
cout << "Could not open or find the image!" << endl;
return -1;
}
Mat dst;
equalizeHist(src, dst);
imshow("Source image", src);
imshow("Equalized Image", dst);
waitKey(0);
return 0;
}
```
这个程序的大致流程如下:
1. 读入一张灰度图像(假设为 `lena.jpg`)。
2. 调用 `equalizeHist` 函数进行直方图均衡化,生成一张新图像 `dst`。
3. 显示原图和均衡化后的图像。
4. 等待用户按下任意键退出程序。
需要注意的是,这个程序只是演示了 OpenCV 自带的直方图均衡化函数,如果想要实现直方图规定化,还需要进一步处理。
相关问题
opencv pythont直方图规定化
OpenCV Python中的直方图规定化是一种将一幅图像的直方图变换为另一幅图像的直方图的方法。这种方法可以用于图像增强、图像匹配等领域。具体实现过程如下:
1. 首先,计算原始图像和规定图像的直方图。
2. 对原始图像的直方图进行归一化处理。
3. 计算原始直方图和规定直方图的累积概率。
4. 对规定图像的直方图进行归一化处理。
5. 计算规定直方图的累积概率。
6. 对原始图像的每个像素值进行映射,使其在规定图像的直方图中的累积概率与原始图像的直方图中的累积概率相等。
7. 将映射后的像素值赋给新的图像。
具体实现代码可以参考上述引用中的代码片段。需要注意的是,这里使用了OpenCV中的hist1D.getHistogram()函数来计算直方图,使用了Mat::zeros()函数来创建一个全零的矩阵。
opencv直方图规定化python
OpenCV直方图规定化是一种将一张图像的直方图匹配到另一张图像的直方图方法。这种方法可以用于图像增强、图像匹配等领域。在Python中,可以使用cv2.normalize()函数来实现直方图规定化。具体步骤如下:
1. 读取原始图像和目标图像。
2. 计算原始图像和目标图像的直方图。
3. 计算原始图像和目标图像的累积分布函数(CDF)。
4. 将原始图像的CDF映射到目标图像的CDF上,得到映射函数。
5. 使用映射函数将原始图像的像素值映射到目标图像的像素值上,得到规定化后的图像。
下面是一个简单的Python代码示例,演示了如何使用OpenCV进行直方图规定化:
```
import cv2
import numpy as np
# 读取原始图像和目标图像
src_img = cv2.imread('src_img.jpg', 0)
dst_img = cv2.imread('dst_img.jpg', 0)
# 计算原始图像和目标图像的直方图
src_hist = cv2.calcHist([src_img], [0], None, [256], [0, 256])
dst_hist = cv2.calcHist([dst_img], [0], None, [256], [0, 256])
# 计算原始图像和目标图像的累积分布函数(CDF)
src_cdf = np.cumsum(src_hist)
src_cdf_normalized = src_cdf * float(src_hist.max()) / src_cdf.max()
dst_cdf = np.cumsum(dst_hist)
dst_cdf_normalized = dst_cdf * float(dst_hist.max()) / dst_cdf.max()
# 将原始图像的CDF映射到目标图像的CDF上,得到映射函数
lut = np.interp(src_cdf_normalized, dst_cdf_normalized, range(256))
# 使用映射函数将原始图像的像素值映射到目标图像的像素值上,得到规定化后的图像
dst_img_normalized = cv2.LUT(src_img, lut)
# 显示原始图像、目标图像和规定化后的图像
cv2.imshow('src_img', src_img)
cv2.imshow('dst_img', dst_img)
cv2.imshow('dst_img_normalized', dst_img_normalized)
cv2.waitKey(0)
cv2.destroyAllWindows()
```