图像预处理第2步:将灰度图二值化
2016-04-19 14:59
309 查看
//图像预处理第2步:将灰度图二值化 void CChildView::OnIMGPRCGrayToWhiteBlack() { ConvertGrayToWhiteBlack(m_hDIB); //在屏幕上显示位图 CDC* pDC=GetDC(); DisplayDIB(pDC,m_hDIB); }
/****************************************************************** * * 函数名称ConvertGrayToWhiteBlack() * * 参数 :HDIB hDIB -原图的句柄 * * 返回值:无 * * 功能: ConvertGrayToWhiteBlack函数采用硬阈值的方法,实现将图像二值化的功能。 * * 说明: 要求待处理的图片为256色 ************************************************************************/ void ConvertGrayToWhiteBlack(HDIB hDIB) { // 指向DIB的指针 LPSTR lpDIB; // 由DIB句柄得到DIB指针并锁定DIB lpDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB); // 指向DIB象素数据区的指针 LPSTR lpDIBBits; // 指向DIB象素的指针 BYTE * lpSrc; // 图像宽度 LONG lWidth; // 图像高度 LONG lHeight; // 图像每行的字节数 LONG lLineBytes; // 找到DIB图像象素起始位置 lpDIBBits = ::FindDIBBits(lpDIB); // 获取图像宽度 lWidth = ::DIBWidth(lpDIB); // 获取图像高度 lHeight = ::DIBHeight(lpDIB); // 计算图像每行的字节数 lLineBytes = WIDTHBYTES(lWidth * 8); // 更换每个象素的颜色索引(即按照灰度映射表换成灰度值) int i,j; //逐行扫描 for(i = 0; i < lHeight; i++) { //逐列扫描 for(j = 0; j < lWidth; j++) { // 指向DIB第i行,第j个象素的指针 lpSrc = (unsigned char*)lpDIBBits + lLineBytes * i + j; // 二值化处理 //大于220,设置为255,即白点 if(*lpSrc>220) *lpSrc=255; //否则设置为0,即黑点 else *lpSrc=0; } }
运行效果:
![](https://images2015.cnblogs.com/blog/684470/201604/684470-20160419145836679-516114276.png)
![](https://images2015.cnblogs.com/blog/684470/201604/684470-20160419145845054-271893888.png)
相关文章推荐
- 安装PHP MongoDB驱动
- CAS单点登录四-单点登出
- 程序员到项目经理:从内而外的提升(比较全面的介绍)
- linux 下 apache启动、停止、重启命令
- spring AOP执行2次
- 怎么破“完全看不懂”
- hdu-5003 Osu!(水题)
- [51NOD]大数加法(模拟)
- spring事务管理几种方式
- Objective-C Runtime能做什么?
- UIEdgeInsets - 1
- 百度地图定位
- vs2012没有C#智能代码提示+更新后报错“未找到与约束匹配的导出”
- css3 box-sizing属性
- 解决webview加载网页出现白屏的问题
- 存储过程清理N天前数据
- Spring多数据源分布式事务管理/springmvc+spring+atomikos[jta]+druid+mybatis
- 初始安卓基本控件_button
- 进程与线程的区别
- fir.im Weekly - 如何打造 Github 「爆款」开源项目