erzhihua.rar

  • PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 1KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 3
    下载次数
  • 2010-09-07 15:09
    上传日期
使用C语言程序,根据双峰值对于图像进行二值化。
erzhihua.rar
  • erzhihua
  • 阈值二值化2.txt
    4.4KB
内容介绍
做个二值化,下面是根据双峰二值化 /************************************************************************* * * 函数名称: * ThresholdDIB() * * 参数: * LPSTR lpDIBBits - 指向源DIB图像指针 * LONG lWidth - 源图像宽度(象素数) * LONG lHeight - 源图像高度(象素数) * * 返回值: * BOOL - 运算成功返回TRUE,否则返回FALSE。 * * 说明: * 该函数用于对图像进行阈值分割运算。 * ************************************************************************/ BOOL CGrayProcess::ThresholdDIB(LPSTR lpDIBBits,int nWidth,int nHeight) { // 指向源图像的指针 LPSTR lpSrc; // 指向缓存图像的指针 LPSTR lpDst; // 指向缓存DIB图像的指针 LPSTR lpNewDIBBits; HLOCAL hNewDIBBits; //循环变量 int i; int j; //像素值 unsigned char pixel; //直方图数组 long lHistogram[256]; //阈值,最大灰度值与最小灰度值,两个区域的平均灰度值 unsigned char iThreshold,iNewThreshold,iMaxGrayValue,iMinGrayValue,iMean1GrayValue,iMean2GrayValue; //用于计算区域灰度平均值的中间变量 long lP1,lP2,lS1,lS2; //迭代次数 int iIterationTimes; // 图像每行的字节数 LONG lLineBytes; // 暂时分配内存,以保存新图像 hNewDIBBits = LocalAlloc(LHND, nWidth * nHeight); if (hNewDIBBits == NULL) { // 分配内存失败 return FALSE; } // 锁定内存 lpNewDIBBits = (char * )LocalLock(hNewDIBBits); // 初始化新分配的内存,设定初始值为255 lpDst = (char *)lpNewDIBBits; memset(lpDst, (BYTE)255, nWidth * nHeight); // 计算图像每行的字节数 lLineBytes = WIDTHBYTES(nWidth * 8); for (i = 0; i < 256;i++) { lHistogram[i]=0; } //获得直方图 iMaxGrayValue = 0; iMinGrayValue = 255; for (i = 0;i < nWidth ;i++) { for(j = 0;j < nHeight ;j++) { // 指向源图像倒数第j行,第i个象素的指针 lpSrc = (char *)lpDIBBits + lLineBytes * j + i; pixel = (unsigned char)*lpSrc; lHistogram[pixel]++; //修改最大,最小灰度值 if(iMinGrayValue > pixel) { iMinGrayValue = pixel; } if(iMaxGrayValue < pixel) { iMaxGrayValue = pixel; } } } //迭代求最佳阈值 iNewThreshold = (iMinGrayValue + iMaxGrayValue)/2; iThreshold = 0; for(iIterationTimes = 0; iThreshold != iNewThreshold && iIterationTimes < 100;iIterationTimes ++) { iThreshold = iNewThreshold; lP1 =0; lP2 =0; lS1 = 0; lS2 = 0; //求两个区域的灰度平均值 for (i = iMinGrayValue;i < iThreshold;i++) { lP1 += lHistogram[i]*i; lS1 += lHistogram[i]; } iMean1GrayValue = (unsigned char)(lP1 / lS1); for (i = iThreshold+1;i < iMaxGrayValue;i++) { lP2 += lHistogram[i]*i; lS2 += lHistogram[i]; } iMean2GrayValue = (unsigned char)(lP2 / lS2); iNewThreshold = (iMean1GrayValue + iMean2GrayValue)/2; } //根据阈值将图像二值化 for (i = 0;i < nWidth ;i++) { for(j = 0;j < nHeight ;j++) { // 指向源图像倒数第j行,第i个象素的指针 lpSrc = (char *)lpDIBBits + lLineBytes * j + i; // 指向目标图像倒数第j行,第i个象素的指针 lpDst = (char *)lpNewDIBBits + lLineBytes * j + i; pixel = (unsigned char)*lpSrc; if(pixel <= iThreshold) { *lpDst = (unsigned char)0; } else { *lpDst = (unsigned char)255; } } } // 复制图像 memcpy(lpDIBBits, lpNewDIBBits, nWidth * nHeight); // 释放内存 LocalUnlock(hNewDIBBits); LocalFree(hNewDIBBits); // 返回 return TRUE; }
评论
    相关推荐
    • 数据库课程设计
      一个数据库课程设计,access管理工具实现,用的是窗体!
    • 数据库课程设计
      数据库课程设计十分完整有需要的请下载啊谢谢
    • 数据库课程设计
      广东工业大学数据库课程设计,可视化界面连接数据库,delphi7
    • 数据库课程设计
      数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述
    • 数据库课程设计
      数据库课程设计》由周爱武、汪海威、肖云编著,遵循数据库课程设计的具体要求,独立于具体的数据库教材,从实际应用系统的需求着手,引导读者逐步完成数据库设计全过程,重点讲解数据库系统的需求分析、概念设计、...
    • 数据库课程设计
      数据库课程设计人事管理系统 数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计...
    • 数据库课程设计
      数据库课程设计,基于visual basic自助银行管理系统,界面很清爽,实用。同学都说好,所以就上传了!!!
    • 数据库课程设计
      数据库课程设计 里面有详细的文档资料 包含数据库一切的图 以及生成的数据库表文件 期末得分为优秀
    • 数据库课程设计
      可以作为数据库课程设计,也可以作为Java的课程设计,内容全面。本资源转载的,非本人原创。用于交流学习,特此申明!
    • 数据库课程设计
      数据库课程设计蓝天大学学生管理系统 2.商店信息管理系统 3.实验室机房收费管理系统 4.图书馆资料检索系统 5.企业库存管理系统 6.仓库管理系统 7.工程项目管理系统 8.教材管理系统 9.企业人事管理系统 10.企业财务...