zoukankan      html  css  js  c++  java
  • 灰度直方算法 C++

     1 #include <string>
     2 #include "20140318计算类的面积.cpp"
     3 
     4 //////////////////////////////////////////////////////////////////////////
     5 //   函数名称: histeq()
     6 //   传入参数: 
     7 //   BYTE*dstData      传入灰度图像内存空间的指针
     8 //   double *srcArray  模版的直方图累积,并进行归一化,大小为256
     9 //   int m_Width       匹配内存空间的宽度
    10 //   int m_Height      匹配内存空间的高度
    11 //   int m_pitch       匹配内存空间的每行所在内存大小
    12 ////////////////////////////////////////////////////////////////////////
    13 
    14 void histeq(int **dstData, double *srcArray,int m_Width,int m_Height,int m_pitch)
    15 {
    16     //void *memset(void *s,int c,size_t n)将已开辟内存空间 s 的首 n 个字节的值设为值 c
    17     m_pitch=sizeof(data[0][0])*nXSize;
    18     double dstHist[256];
    19     memset(dstHist,0,256 * sizeof(double));
    20     double dstArray[256];
    21     memset(dstArray,0,256 * sizeof(double));
    22     int i=0,j=0;
    23     //统计直方图
    24     for (i = 0;i < m_Height;i++)
    25     {
    26         for (j = 0;j < m_Width;j++)
    27         {
    28             dstHist[(int)dstData[i * m_pitch + j]]++;
    29         }
    30     }
    31     //计算直方图累积
    32     double m_Bytes = m_Width * m_Height;//m_Bytes初始化为像素总个数
    33     dstArray[0] = dstHist[0];//第一个初始化为dstHist[0]=0
    34     for (i = 1;i < 256;i++)
    35     {
    36         dstArray[i] = dstArray[i - 1] + dstHist[i];
    37     }
    38     //直方图累积归一化
    39     for (i = 0;i < 256;i++)
    40     {
    41         dstArray[i] /= m_Bytes;
    42     }
    43     //直方图匹配
    44     double m_diffA,m_diffB;
    45     int k = 0;
    46     float mapPixel[256];//每个颜色的value
    47     memset(mapPixel,0,256 * sizeof(float));
    48     
    49     
    50     for (i = 0;i < 256;i++)
    51     {
    52         m_diffB = 1;
    53         for (j = k; j < 256;j++)
    54         {
    55             m_diffA = abs(dstArray[i] - srcArray[j]);
    56             if (m_diffA - m_diffB < 1.0E-5)
    57             {
    58                 m_diffB = m_diffA;
    59                 k = j;
    60             }
    61             else
    62             {
    63                 k = j - 1;
    64                 break;
    65             }
    66         }
    67         if (k == 255)
    68         {
    69             for (int l = i;l < 256;l++)
    70             {
    71                 mapPixel[l] = (float) k;
    72             }
    73             break;
    74         }
    75         mapPixel[i] = (float) k;
    76     }
    77     //目标图像查找索引表
    78     for (i = 0;i < m_Height;i++)
    79     {
    80         for (j = 0;j < m_Width;j++)
    81         {
    82             dstData[i * m_pitch + j] = mapPixel[(int)dstData[i * m_pitch + j]];
    83         }
    84     }
    85 }
  • 相关阅读:
    【pygame游戏编程】第二篇-----移动图像
    【pygame游戏编程】第五篇-----动画显示
    【pygame游戏编程】第四篇-----打字测速游戏
    【pygame游戏编程】第一篇-----创建一个窗口
    pygame编程之font模块
    pygame编组(精灵组)Group中的常用方法介绍
    javascript遍历对象的属性
    Spring中的@ImportResource
    SpringBoot中的@ConfigurationProperties
    开源协议是什么?有哪些?如何选择?
  • 原文地址:https://www.cnblogs.com/AmatVictorialCuram/p/3611027.html
Copyright © 2011-2022 走看看