资源简介
用于对灰度图像进行二值化分割,采用贝叶斯方法计算阈值
代码片段和文件信息
//////////////////////////////////////////////////////////////////////////
// 文件名:mybinary.cpp
//
// 图像二值化函数:
//
// GetThreshold() - 计算图像阈值
// BinaryGlobal() - 图像阈值分割运算
//
//////////////////////////////////////////////////////////////////////////
#include
//////////////////////////////////////////////////////////////////////////
//
// 函数名称:
// ThresholdTrans()
//
// 参数:
// unsigned char* pImage - 指向源图像指针
// int lWidth - 源图像宽度(象素数)
// int lHeight - 源图像高度(象素数)
// unsigned char bThre - 阈值
//
// 返回值:
// bool - 成功返回TRUE,否则返回FALSE。
//
// 说明:
// 该函数用来对图像进行阈值变换。对于灰度值小于阈值的象素直接设置
// 灰度值为0;灰度值大于阈值的象素直接设置为255。
//
//////////////////////////////////////////////////////////////////////////
bool ThresholdTrans(unsigned char* pImage int lWidth int lHeight unsigned char bThre)
{
unsigned char* lpSrc = pImage;
int i j;
for(i = 0; i < lHeight; i++)
{
for(j = 0; j < lWidth; j++)
{
// if ((*lpSrc) < bThre)
if ((*lpSrc) <= bThre)
{
*lpSrc++ = 0;
}
else
{
*lpSrc++ = 255;
}
}
}
return true;
}
//---------------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////////
//
// 函数名称:
// GetThreshold()
//
// 参数:
// int* lHistogram - 指向源图像的直方图的指针
//
// 返回值:
// unsigned char - 图像分割的阈值。
//
// 说明:
// 该函数用于计算图像二值化分割的阈值。
//
//////////////////////////////////////////////////////////////////////////
unsigned char GetThreshold(int* lpHistogram)
{
int i;
unsigned char iMaxGrayValueiMinGrayValue;
unsigned char iThresholdiNewThreshold;
unsigned char iMean1GrayValueiMean2GrayValue;
int lP1lP2lS1lS2;
int iIterationTimes;
iMinGrayValue = 255;
for(i = 0; i < 256; i++)
{
if(lpHistogram[i] != 0)
{
iMinGrayValue = i;
break;
}
}
iMaxGrayValue = 0;
for(i = 255; i >= 0; i--)
{
if(lpHistogram[i] != 0)
{
iMaxGrayValue = i;
break;
}
}
if(iMinGrayValue == iMaxGrayValue)
return 255;
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 += lpHistogram[i]*i;
lS1 += lpHistogram[i];
}
if(lS1 == 0) break;
iMean1GrayValue = (unsign
- 上一篇:C++程序设计朱金付版课后习题答案
- 下一篇:AES、DES加密算法C语言源码
相关资源
- VC6基于对话框的BMP灰度图片显示和轮
- jpeg图片解码灰度二值化c语言实现
- jbig二值图像压缩算法编码实现
- 数字图像处理MFC编程之灰度图像线性
- VC++实现灰度图像的6种边缘检测算子
- bmp24位彩色图像转8位灰度图像纯C++
- C++实现调用摄像头并实时二值化
- opencv 求二值化图像的形心(只能是二
- 数据结构实习 软件压缩/解压缩软件
- Opencv cvKmeans2进行灰度图像和彩色图像
- 二值化源代码
- 图像处理,C++,C语言。二值化,灰度
- otsu二值化c代码
- 应用C/C++语言编写灰度图像霍夫曼编码
- 使用c语言实现图像二值化
- 大津法C语言实现方法
- bmp图片灰度化二值化
- C++实现灰度图像的边缘检测、提取及
- 直方图平滑与双峰分布二值化
- opencv提取图片中人轮廓
- C++图像二值化代码
- C++实现灰度图像的几何变换,包括转
- STM32F103驱动二值化摄像头
- 灰度图像和二维数组相互转换操作
- vc++将8位和24位彩色图像转换成灰度图
评论
共有 条评论