• 大小: 1.92MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-15
  • 语言: C/C++
  • 标签: soble  算子  边缘检测  

资源简介

基于梯度算子 soble 算子的 边缘检测 VisualC++实现(可重建图像)

资源截图

代码片段和文件信息

// ************************************************************************
//  文件名:edgecontour.cpp
//
//  图像边缘与轮廓运算API函数库:
//
//  RobertDIB() - robert边缘检测运算
//  SobelDIB() - sobel边缘检测运算
//  PrewittDIB() - prewitt边缘检测运算
//  KirschDIB() - kirsch边缘检测运算
//  GaussDIB() - gauss边缘检测运算
//  HoughDIB() - 利用Hough变换检测平行直线
//  ContourDIB() - 轮廓提取
//  TraceDIB() - 轮廓跟踪
//  FillDIB() - 种子填充算法1
//  Fill2DIB() - 种子填充算法2

//
// ************************************************************************

#include “stdafx.h“
#include “edgecontour.h“
#include “TemplateTrans.h“
#include “DIBAPI.h“

#include 
#include 

/*************************************************************************
 *
 * 函数名称:
 *   RobertDIB()
 *
 * 参数:
 *   LPSTR lpDIBBits    - 指向源DIB图像指针
 *   LONG  lWidth       - 源图像宽度(象素数,必须是4的倍数)
 *   LONG  lHeight      - 源图像高度(象素数)
 * 返回值:
 *   BOOL               - 边缘检测成功返回TRUE,否则返回FALSE。
 *
 * 说明:
 * 该函数用Robert边缘检测算子对图像进行边缘检测运算。
 * 
 * 要求目标图像为灰度图像。
 ************************************************************************/

BOOL WINAPI RobertDIB(LPSTR lpDIBBits LONG lWidth LONG lHeight)
{

// 指向源图像的指针
LPSTR lpSrc;

// 指向缓存图像的指针
LPSTR lpDst;

// 指向缓存DIB图像的指针
LPSTR lpNewDIBBits;
HLOCAL hNewDIBBits;

//循环变量
long i;
long j;

//像素值
double result;
unsigned char pixel[4];

// 暂时分配内存,以保存新图像
hNewDIBBits = LocalAlloc(LHND lWidth * lHeight);

if (hNewDIBBits == NULL)
{
// 分配内存失败
return FALSE;
}

// 锁定内存
lpNewDIBBits = (char * )LocalLock(hNewDIBBits);

// 初始化新分配的内存,设定初始值为255
lpDst = (char *)lpNewDIBBits;
memset(lpDst (BYTE)255 lWidth * lHeight);


//使用水平方向的结构元素进行腐蚀
for(j = lHeight-1; j > 0; j--)
{
for(i = 0;i  {
//由于使用2×2的模板,为防止越界,所以不处理最下边和最右边的两列像素

// 指向源图像第j行,第i个象素的指针
lpSrc = (char *)lpDIBBits + lWidth * j + i;

// 指向目标图像第j行,第i个象素的指针
lpDst = (char *)lpNewDIBBits + lWidth * j + i;

//取得当前指针处2*2区域的像素值,注意要转换为unsigned char型
pixel[0] = (unsigned char)*lpSrc;
pixel[1] = (unsigned char)*(lpSrc + 1);
pixel[2] = (unsigned char)*(lpSrc - lWidth);
pixel[3] = (unsigned char)*(lpSrc - lWidth + 1);

//计算目标图像中的当前点
 result = sqrt(( pixel[0] - pixel[3] )*( pixel[0] - pixel[3] ) + \
  ( pixel[1] - pixel[2] )*( pixel[1] - pixel[2] ));
*lpDst = (unsigned char)result;

}
}

// 复制腐蚀后的图像
memcpy(lpDIBBits lpNewDIBBits lWidth * lHeight);

// 释放内存
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);

// 返回
return TRUE;
}

/*************************************************************************
 *
 * 函数名称:
 *   SobelDIB()
 *
 * 参数:
 *   LPSTR lpDIBBits    - 指向源DIB图像指针
 *   LONG  lWidth       - 源图像宽度(象素数,必须是4的倍数)
 *   LONG  lHeight      - 源图像高度(象素数)
 * 返回值:
 *   BOOL               - 边缘检测成功返回TRUE,否则返回FALSE。
 *
 * 说明:
 * 该函数用Sobel边缘检测算子对图像进行边缘检测运算。
 * 
 * 要求目标图像为灰度图像。
 ***********************************************

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      22146  2008-11-07 18:32  sobel边缘检测运算(可图象重建)\Debug\DIBAPI.obj

     文件      25584  2008-11-07 18:32  sobel边缘检测运算(可图象重建)\Debug\edgecontour.obj

     文件      20195  2008-11-09 19:10  sobel边缘检测运算(可图象重建)\Debug\MainFrm.obj

     文件     151654  2008-11-09 19:10  sobel边缘检测运算(可图象重建)\Debug\my1.exe

     文件     372612  2008-11-09 19:10  sobel边缘检测运算(可图象重建)\Debug\my1.ilk

     文件      23094  2008-11-07 18:32  sobel边缘检测运算(可图象重建)\Debug\my1.obj

     文件    5485732  2008-11-07 18:32  sobel边缘检测运算(可图象重建)\Debug\my1.pch

     文件     386048  2008-11-07 18:32  sobel边缘检测运算(可图象重建)\Debug\my1.pdb

     文件       7256  2008-11-07 18:32  sobel边缘检测运算(可图象重建)\Debug\my1.res

     文件      35573  2008-11-07 18:32  sobel边缘检测运算(可图象重建)\Debug\my1Doc.obj

     文件      25236  2008-11-07 18:32  sobel边缘检测运算(可图象重建)\Debug\my1View.obj

     文件     105874  2008-11-07 18:32  sobel边缘检测运算(可图象重建)\Debug\StdAfx.obj

     文件       9350  2008-11-07 18:32  sobel边缘检测运算(可图象重建)\Debug\TemplateTrans.obj

     文件     205824  2008-11-12 09:30  sobel边缘检测运算(可图象重建)\Debug\vc60.idb

     文件     364544  2008-11-07 18:32  sobel边缘检测运算(可图象重建)\Debug\vc60.pdb

     文件      29042  2007-06-03 17:37  sobel边缘检测运算(可图象重建)\DIBAPI.CPP

     文件       1806  2004-10-21 08:48  sobel边缘检测运算(可图象重建)\DIBAPI.H

     文件      39362  2008-01-03 14:11  sobel边缘检测运算(可图象重建)\edgecontour.cpp

     文件       1008  2001-02-22 23:18  sobel边缘检测运算(可图象重建)\edgecontour.h

     文件       2504  2007-06-08 14:05  sobel边缘检测运算(可图象重建)\MainFrm.cpp

     文件       1581  2007-06-08 14:05  sobel边缘检测运算(可图象重建)\MainFrm.h

     文件      29000  2008-11-07 18:31  sobel边缘检测运算(可图象重建)\my1.aps

     文件       2329  2008-11-12 09:31  sobel边缘检测运算(可图象重建)\my1.clw

     文件       4155  2007-06-08 14:05  sobel边缘检测运算(可图象重建)\my1.cpp

     文件       4885  2008-01-03 14:11  sobel边缘检测运算(可图象重建)\my1.dsp

     文件        531  2007-06-08 14:05  sobel边缘检测运算(可图象重建)\my1.dsw

     文件       1323  2007-06-08 14:05  sobel边缘检测运算(可图象重建)\my1.h

     文件     164864  2008-11-12 09:32  sobel边缘检测运算(可图象重建)\my1.ncb

     文件      56832  2008-11-12 09:32  sobel边缘检测运算(可图象重建)\my1.opt

     文件        779  2008-11-09 19:10  sobel边缘检测运算(可图象重建)\my1.plg

............此处省略21个文件信息

评论

共有 条评论