灰度拉伸是图像增强的一种,它是把分离的灰度转换到比较集中的程度,这时就更利于分析。 代码如下: /****************************************************************************** * 作用: 灰度均衡函数 * 参数: pDst 输出图像的像素数组 * 参数: pSrc 原始图像的像素数组 * 参数: nWidth 原始图像宽度 * 参数: nHeight 原始图像高度 ******************************************************************************/ int GrayEqualize(BYTE* pDst, BYTE* pSrc, int nWidth, int nHeight) { if (!pSrc || !pDst) { return EXIT_FAILURE; } // 灰度映射表 BYTE map[256]; long lCounts[256]; memset(lCounts, 0, sizeof(long) * 256); int i; // 计算各灰度值个数 for (i = 0; i < nWidth * nHeight; i++) { int x = pSrc[i * 4]; lCounts[x]++; } // 保存运算中的临时值 long lTemp; for (i = 0; i < 256; i++) { lTemp = 0; for (int j = 0; j <= i; j++) lTemp += lCounts[j]; map[i] = (BYTE)(lTemp * 255.0f / nWidth / nHeight); } // 变换后的值直接在映射表中查找 for (i = 0; i < nWidth * nHeight; i++) { int x = pSrc[i * 4]; pDst[i*4] = pDst[i*4+1] = pDst[i*4+2] = map[x]; pDst[i*4+3] = 255; } return EXIT_SUCCESS; }