8种常用图像处理算法这是我毕业设计的一部分代码.docx
《8种常用图像处理算法这是我毕业设计的一部分代码.docx》由会员分享,可在线阅读,更多相关《8种常用图像处理算法这是我毕业设计的一部分代码.docx(31页珍藏版)》请在冰豆网上搜索。
8种常用图像处理算法这是我毕业设计的一部分代码
种常用图像处理算法(函数)这是我毕业设计的一部分代码
*************************************************************************
*
*函数名称:
*
*()
*
*参数:
*
*指向源图像指针
*
*返回值:
*
*镜像成功返回,否则返回。
*
*说明:
*
*该函数用来实现图像的垂直镜像。
*
************************************************************************
()
{
原图象宽度
;
原图象高度
;
原图象的颜色数
;
原图象的信息头结构指针
;
指向原图象和目的图象的像素的指针
;
平移后剩余图像在源图像中的位置(矩形区域)
;
指向原图像像素的指针
;
指向复制图像像素的指针
;
内存句柄
;
循环变量
;
图像每行的字节数
;
获取图象的信息头结构的指针
();
找到图象的像素位置
()();
获取图象的宽度
();
获取图象的高度
();
获取图象的颜色数
();
计算图像每行的字节数
(*(>));
暂时分配内存,以保存新图像
(,);
分配内存失败,直接返回
()
;
锁定内存
()();
如果是色位图或真彩色位图
()
{
平移图像,每次移动一行
(;<;)
{
指向原图象倒数第行像素起点的指针
()*;
目标区域同样要注意上下倒置的问题
()*();
备份一行
(,,);
将倒数第行像素复制到第行
(,,);
将第行像素复制到第行
(,,);
}
}
{
("只支持色和真彩色位图");
释放内存
();
();
;
}
释放内存
();
();
返回
;
}
*************************************************************************
*
*函数名称:
*
*()
*
*参数:
*
*指向源图像指针
*
*
*说明:
*
*该函数用来实现图像的旋转。
*
************************************************************************
()
{
原图象宽度
;
原图象高度
;
旋转后图象宽度
;
旋转后图象高度
;
原图象的颜色数
;
原图象的信息头结构指针
;
指向原图象和目的图象的像素的指针
;
指向原图像像素的指针
;
指向旋转后图像(像素)的指针
;
;
旋转后新的句柄
;
循环变量
;
原图像每行的字节数
;
旋转后图像每行的字节数
;
旋转角度的弧度
;
旋转角度的正弦和余弦
;
旋转前图象四个角的坐标(以图象中心为坐标系原点)
;
;
旋转后图象四个角的坐标(以图象中心为坐标系原点)
;
;
两个中间量
;
找到图象的像素位置
()();
获取图象的宽度
();
获取图象的高度
();
获取图象的颜色数
();
获取指向原位图信息头结构的指针
();
计算原图像每行的字节数
(*(>));
将旋转角度从度转换到弧度
(*);
计算旋转角度的正弦
()();
计算旋转角度的余弦
()();
计算原图的四个角的坐标(以图像中心为坐标系原点)
()(());
()(());
()(());
()(());
()(());
()(());
()(());
()(());
计算新图四个角的坐标(以图像中心为坐标系原点)
**;
**;
**;
**;
**;
**;
**;
**;
计算旋转后的图像实际宽度
()(((),
()));
计算旋转后的图像高度
()(((),
()));
计算旋转后图像每行的字节数
(*>);
计算两个常数
()(*()**()*
*());
()(*()**()*
*());
暂时分配内存,以保存新图像
()(,*
*()());
分配内存失败,直接返回
()
;
锁定内存
()(());
复制信息头和调色板
(,*()());
获取图象的信息头结构的指针
();
更新图象的高度和宽度
>;
>;
找到新像素的起始位置
()();
如果是色位图
()
{
旋转后图像每行
(;<;)
{
旋转后图象每列
(<)
{
指向图象第行第个像素的指针
()*();
计算每个像素点在原图象中的坐标
()((())*(())*);
()((())*(())*);
判断是否在源图象范围之内
((>)(<)(>)(<))
{
指向源图象第行,第个象素的指针
()*();
复制象素
**;
}
{
对于源图中没有的象素,直接赋值为
*(());
}
}
}
}
如果是位真彩色位图
()
{
旋转后图像每行
(;<;)
{
旋转后图象每列
(<)
{
指向图象第行第个像素的指针
()*()*;
计算每个像素点在原图象中的坐标
()((())*(())*);
()((())*(())*);
判断是否在源图象范围之内
((>)(<)(>)(<))
{
指向源图象第行,第个象素的指针
()*()*;
复制象素
();
}
{
对于源图中没有的象素,直接赋值为
();
}
}
}
}
{
("只支持色和真彩色位图");
释放内存
();
();
;
}
返回
;
}
*************************************************************************
*
*函数名称:
*()
*
*参数:
*指向源的指针
*轴方向缩放比率
*轴方向缩放比率
*
*返回值:
*缩放成功返回新句柄,否则返回。
*
*说明:
*该函数用来缩放图像,返回新生成的句柄。
*
************************************************************************
(,,)
{
源图像的宽度和高度
;
;
缩放后图像的宽度和高度
;
;
;
缩放后图像的宽度(',必须是的倍数)
;
指向源图像的指针
;
指向源象素的指针
;
缩放后新句柄
;
指向缩放图像对应象素的指针
;
指向缩放图像的指针
;
;
指向结构的指针()
;
指向结构的指针
;
循环变量(象素在新中的坐标)
;
;
象素在源中的坐标
;
;
图像每行的字节数
;
找到源图像象素起始位置
()();
获取图像的宽度
();
获取图像的高度
();
();
();
计算图像每行的字节数
(*(>));
计算缩放后的图像实际宽度
此处直接加是由于强制类型转换时不四舍五入,而是直接截去小数部分
()(*);
计算新图像每行的字节数
(*(>));
计算缩放后的图像高度
()(*);
分配内存,以保存新
()(,**()());
判断是否内存分配失败
()
{
分配内存失败
;
}
锁定内存
()(());
复制信息头和调色板
(,,*()());
找到新象素起始位置
()();
获取指针
();
();
更新中图像的高度和宽度
(())
{
对于
>;
>;
}
{
对于其它格式的
>();
>();
}
()
{
针对图像每行进行操作
(;<;)
{
针对图像每列进行操作
(;<;)
{
指向新第行,第个象素的指针
注意此处宽度和高度是新的宽度和高度
()*();
计算该象素在源中的坐标
()();
()();
判断是否在源图范围内
((>)(<)(>)(<))
{
指向源第行,第个象素的指针
()*();
复制象素
**;
}
{
对于源图中没有的象素,直接赋值为
*(());
}
}
}
}
()
{(;<;)
{
针对图像每列进行操作
(;<;)
{
指向新第行,第个象素的指针
注意此处宽度和高度是新的宽度和高度
()*()*;
计算该象素在源中的坐标
()();
()();
判断是否在源图范围内
((>)(<)(>)(<))
{
指向源第行,第个象素的指针
()*()*;
复制象素
();
}
{
对于源图中没有的象素,直接赋值为
();
}
}
}
}
返回
;
}
*************************************************************************
*
*函数名称:
*()
*
*说明:
*该算法函数用来把图像转化成灰度图像。
*
************************************************************************
()
{
:
获取文档指针
*();
指向的指针
;
指向象素指针
;
指向的一个象素的指针
*;
颜色表中的颜色数目
;
灰度映射表
[];
调色板索应循环变量
;
图象高度循环变量
;
图象宽度循环变量
;
图像宽度
;
图像高度
;
图像每行的字节数
;
指向结构的指针()
;
指向结构的指针()
;
表明是否是的标记
;
()(()>());
获取指向结构的指针()
();
获取指向结构的指针()
();
锁定
获取中颜色表中的颜色数目
();
判断是否是色位图
()
{
("不是色位图!
");
解除锁定
(()>());
返回
;
}
更改光标形状
();
判断是否是的
();
将原图象的调色板转化为灰度调色板
建立原调色板索引与灰度调色板索引的映射关系
(;<;)
{
()
{
对原色调色板的每一表项计算对应的灰度值
[]()(*>[]
*>[]
*>[]);
建立灰度调色板
红色分量
>[];
绿色分量
>[];
蓝色分量
>[];
保留位
>[];
}
{
对原色调色板的每一表项计算对应的灰度值
[]()(*>[]
*>[]
*>[]);
建立灰度调色板
红色分量
>[];
绿色分量
>[];
蓝色分量
>[];
}
}
找到图像象素起始位置
();
获取图像宽度
();
获取图像高度
();
计算图像每行的字节数
(*);
更换原色位图的每个象素的颜色索引
每行
(;<;)
{
每列
(;<;)
{
指向第行,第列的象素的指针
(*)*();
对色位图,其像素值是调色板索引值
对灰度图,索引值就等于其灰度值
映射调色板索引
*[*];
}
}
替换当前调色板为灰度调色板
>()>(,
()>);
设置脏标记
>();
实现新的调色板
(());
更新视图
>();
解除锁定
(()>());
恢复光标
();
}
*************************************************************************
*
*函数名称:
*
*()
*
*参数:
*
*指向源图像指针
*
*返回值:
*
*加入随机噪声操作成功返回,否则返回。
*
*说明:
*
*该函数用来对色位图和位真彩色位图进行加入随即噪声操作。
*
************************************************************************
()
{
图像宽度和高度
;
指向图像像素的指针
;
指向源图像的指针
;
循环变量
;
;
图像每行的字节数
;
指向图像信息头结构的指针
;
图像的颜色数
;
噪声
;
计算图像每行的字节数
();
计算图像的高度和宽度
();
();
找到图像像素的起始位置
();
计算图像的颜色数
();
计算图像每行的字节数
(*>);
生成伪随机种子
(()());
在图像中加噪
如果是色位图
()
{
(<)
{
(<)
{
随机的噪声值
();
指向源图像倒数第行,第个象素的指针
(*)*;
在像素值中加入噪声值
*()((()*())*);
}
}
}
如果是位真彩色位图
()
{
(<)
{
(<)
{
();
指向源图像倒数第行,第个象素的指针
(*)**;
在每个像素的分量中加入随机的噪声值
*()((()*())*);
*()((()*())*);
*()((()*())*);
}
}
}
如果既不是色位图也不是位真彩色位图,直接返回
{
("只支持色位图和位真彩色位图");
;
}
返回
;
}
*************************************************************************
*
*函数名称:
*
*()
*
*参数:
*
*指向源图像指针
*
*
*
*操作成功返回,否则返回。
*
*说明:
*
*该算法函数用来对色位图和位真彩色位图进行亮度调整操作。
*
************************************************************************
(,)
{
,;
*;
;
;
;
;
;
()
;
(*);
(!
)
;
();
()
{
(;<;)
{
>[](>[],,);
>[](>[],,);
>[](>[],,);
}
}
()
{
();
((>)*(>))
((>)*(>));
(;<>;)
{
(;<>;)
{
()*();
()*();
()*();
*(,,);
*(,,);
*(,,);
}
;
}
}
{
("只处理色和位位图");
;
}
;
}
*************************************************************************
*
*函数名称:
*
*()
*
*参数:
*
*指向源图像指针
*
*
*
*操作成功返回,否则返回。
*
*说明:
*
*该算法函数用来对色位图和位真彩色位图进行色调调整操作。
*
************************************************************************
(,,,)
{
,;
*;
;
;
;
;
;
()
;
(*);
(!
)
;
();
()
{
(;<;)
{
>[](>[],,);
>[](>[],,);
>[](>[],,);
}
}
()
{
();
((>)*(>))
((>)*(>));
(;<>;)
{
(;<>;)
{
()*();
()*();
()*();
*(,,);
*(,,);
*(,,);
}
;
}
}
{
("只处理色和位位图");
;
}
;
}
*************************************************************************
*
*函数名称:
*
*()
*
*参数:
*
*指向源图像指针
*
*
*
*操作成功返回,否则返回。
*
*说明:
*
*该算法函数用来对色位图和位真彩色位图进行对比度调整操作。
*
************************************************************************
(,)
{
,;
*;
;
;
;
;
;
()
;
(*);
(!
)
;
();
()
{
(;<;)
{
(>)
{
;
;
(()());
((>[]));
((>[]));
((>[]));
}
{
(*());
((>[]));
((>[]));
((>[]));
}
}
}
()
{
();
((>)*(>))
((>)*(>));
(;<>;)
{
(;<>;)
{
()*();
()*();
()*();
(>)
{
;
;
(()());
();
();
();
}
{
(*());
();
();
();
}
*;
*;
*;
}
;
}
}
{
("只处理色和位位图");
;
}
;
}