www.pudn.com > FingerPro.rar > morph.cpp
// ************************************************************************ // 文件名:morph.cpp // // 图像形态学变换API函数库: // // ErosionDIB() - 图像腐蚀 // DilationDIB() - 图像膨胀 // OpenDIB() - 图像开运算 // CloseDIB() - 图像闭运算 // ThiningDIB() - 图像细化 // // ************************************************************************ #include "stdafx.h" #include "morph.h" #include "DIBAPI.h" #include#include /************************************************************************* * * 函数名称: * ErosiontionDIB() * * 参数: * LPSTR lpDIBBits - 指向源DIB图像指针 * LONG lWidth - 源图像宽度(象素数,必须是4的倍数) * LONG lHeight - 源图像高度(象素数) * int nMode - 腐蚀方式,0表示水平方向,1表示垂直方向,2表示自定义结构元素。 * int structure[3][3] - 自定义的3×3结构元素。 * * 返回值: * BOOL - 腐蚀成功返回TRUE,否则返回FALSE。 * * 说明: * 该函数用于对图像进行腐蚀运算。结构元素为水平方向或垂直方向的三个点,中间点位于原点; * 或者由用户自己定义3×3的结构元素。 * * 要求目标图像为只有0和255两个灰度值的灰度图像。 ************************************************************************/ BOOL WINAPI ErosionDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, int nMode , int structure[3][3]) { // 指向源图像的指针 LPSTR lpSrc; // 指向缓存图像的指针 LPSTR lpDst; // 指向缓存DIB图像的指针 LPSTR lpNewDIBBits; HLOCAL hNewDIBBits; //循环变量 long i; long j; int n; int m; //像素值 unsigned char pixel; // 暂时分配内存,以保存新图像 hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight); if (hNewDIBBits == NULL) { // 分配内存失败 return FALSE; } // 锁定内存 lpNewDIBBits = (char * )LocalLock(hNewDIBBits); // 初始化新分配的内存,设定初始值为255 lpDst = (char *)lpNewDIBBits; memset(lpDst, (BYTE)255, lWidth * lHeight); if(nMode == 0) { //使用水平方向的结构元素进行腐蚀 for(j = 0; j