一段很巧妙的直方图统计算法代码

    double absolute_histo[256] = { 0 };
    for (int i = 0; i < Image.rows; i++)
    {
        const uchar* p = Image.ptr<uchar>(i);
        for (int j = 0; j < Image.cols; j++)
        {
            absolute_histo[*(p + j)]++;
        }
    }

这是一段hao来的好东西哎。。。。不然要switch 256个case了

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
传统的直方图均衡化算法是一种用于图像增强的方法,它通过重新分布图像的像素值来增强图像的对比度。该算法的原理如下: 1. 统计像素值的频数:遍历图像的每个像素,统计每个像素值出现的频数。 2. 计算累积分布函数(CDF):将频数归一化得到概率密度函数(PDF),然后计算累积分布函数(CDF),即将每个像素值的概率累加起来。 3. 映射像素值:将CDF映射到一个新的像素值范围,通常是0到255。这可以通过将CDF乘以255并取整来实现。 4. 更新图像像素值:遍历图像的每个像素,将原始像素值替换为映射后的像素值。 通过这个过程,直方图均衡化算法可以使图像的像素值分布更加均匀,从而增强图像的对比度。 以下是一个简单的C语言代码示例,演示了如何实现传统的直方图均衡化算法: ```c #include <stdio.h> void histogramEqualization(int image[], int width, int height) { int histogram[256] = {0}; // 存储像素值的频数 int cdf[256] = {0}; // 存储累积分布函数 // 统计像素值的频数 for (int i = 0; i < width * height; i++) { histogram[image[i]]++; } // 计算累积分布函数 cdf = histogram; for (int i = 1; i < 256; i++) { cdf[i] = cdf[i - 1] + histogram[i]; } // 映射像素值 int totalPixels = width * height; for (int i = 0; i < 256; i++) { cdf[i] = (int)(((float)cdf[i] / totalPixels) * 255); } // 更新图像像素值 for (int i = 0; i < width * height; i++) { image[i] = cdf[image[i]]; } } int main() { // 假设有一个灰度图像,存储在一维数组中 int image[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 }; int width = 2; int height = 5; // 应用直方图均衡化算法 histogramEqualization(image, width, height); // 打印均衡化后的图像像素值 for (int i = 0; i < width * height; i++) { printf("%d ", image[i]); } return 0; } ``` 这段代码演示了如何对一个简单的灰度图像进行直方图均衡化。你可以根据自己的需求修改代码以适应不同的图像类型和格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值