资源简介
使用C语言实现的中值滤波程序,可直接嵌入,模块化设计-可复用性高!
代码片段和文件信息
/*************************************************************************
* 函数名称:
* MedianFilter()
* 参数:
* int iFilterH - 滤波器的高度
* int iFilterW - 滤波器的宽度
* int iFilterMX - 滤波器的中心元素X坐标
* int iFilterMY - 滤波器的中心元素Y坐标
* 说明:
* 该函数对DIB图像进行中值滤波。
************************************************************************/
#define iFilterW 1
#define iFilterH 1
#define iFilterMX 1
#define iFilterMY 1
#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)
unsigned char GetMedianNum(int * bArray int iFilterLen);
void MedianFilter(unsigned char *pImg1unsigned char *pImgint nWidthint nHeight)
{
unsigned char *lpSrc; // 指向源图像的指针
unsigned char *lpDst; // 指向要复制区域的指针
int aValue[iFilterH*iFilterW]; // 指向滤波器数组的指针
int ijkl; // 循环变量
int lLineBytes; // 图像每行的字节数
lLineBytes = WIDTHBYTES(nWidth * 8);
for ( i=0;i (*pImg)=0;
// 开始中值滤波
// 行(除去边缘几行)
for(i = iFilterMY; i < nHeight - iFilterH + iFilterMY + 1; i++)
{
// 列(除去边缘几列)
for(j = iFilterMX; j < nWidth - iFilterW + iFilterMX + 1; j++)
{
// 指向新DIB第i行,第j个象素的指针
lpDst = pImg + lLineBytes * (nHeight - 1 - i) + j;
// 读取滤波器数组
for (k = 0; k < iFilterH; k++)
{
for (l = 0; l < iFilterW; l++)
{
// 指向DIB第i - iFilterMY + k行,第j - iFilterMX + l个象素的指针
lpSrc = pImg1 + lLineBytes * (nHeight - 1
- i + iFilterMY - k) + j - iFilterMX + l;
// 保存象素值
aValue[k * iFilterW + l] = *lpSrc;
}
}
// 获取中值
* lpDst = GetMedianNum(aValue iFilterH * iFilterW);
}
}
}
unsigned char GetMedianNum(int * bArray int iFilterLen)
{
int ij; // 循环变量
unsigned char bTemp;
// 用冒泡法对数组进行排序
for (j = 0; j < iFilterLen - 1; j ++)
{
for (i = 0; i < iFilterLen - j - 1; i ++)
{
if (bArray[i] > bArray[i + 1])
{
// 互换
bTemp = bArray[i];
bArray[i] = bArray[i + 1];
bArray[i + 1] = bTemp;
}
}
}
// 计算中值
if ((iFilterLen & 1) > 0)
{
// 数组有奇数个元素,返回中间一个元素
bTemp = bArray[(iFilterLen + 1) / 2];
}
else
{
// 数组有偶数个元素,返回中间两个元素平均值
bTemp = (bArray[iFilterLen / 2] + bArray[iFilterLen / 2 + 1]) / 2;
}
return bTemp;
}
相关资源
- 最新的魔兽世界机器人脚本NpcBot.pat
- 商品库存管理系统 C++ MFC
- 围棋C语言代码
- 单片机PID控制(C语言)
- 安卓c语言开发SDL2+opengles
- Qt的纽带风格界面实现(Office Ribbon风
- 漂亮的仪表盘(widget.cpp)
- Qt画图工具源码(qgraphics draw)
- c++ 多功能计算器
- qt cmd实现ping
- C++17 In Detail
- linux ac108多麦方案驱动(ac108.c)
- 简易web服务器的设计与实现
- 基于单片机的交通灯设计.doc
- 人脸识别(opencv_facedetect_v4l2)
- gd32的单通道adc用dma采集
- vscode作为编辑器开发stm32f103c8
- usb之CDC(CDC_Standalone.rar)
- LC-PWM-RGB(RGB LED灯 调色调光器 PWM控制
- 《LINUX C编程从初学到精通》光盘源码
- SJA1000 CAN芯片驱动(SJA1000.c)
- 嵌入式QtC++编程课件
- 物联网GPS跟踪器demo程序
- 嵌入式c编程语言入门与深入.pdf58199
- C51单片机技术教程(304页)
- C语言模块化编程(我见过最好的)
- 基于esp32的摄像头采集图像代码
- C51单片机交通
- PCA9539驱动程序
- STM32连接EC20使用内置MQTT协议接入阿里
评论
共有 条评论