//图像预处理第1步:将256色图像转化为灰度图像
void CChildView::OnIMGPRC256ToGray()
{    Convert256toGray(m_hDIB);    //在屏幕上显示位图CDC* pDC=GetDC();DisplayDIB(pDC,m_hDIB);
}

/****************************************************************
* 函数名称:
*      Convert256toGray()
*
* 参数:
*     HDIB hDIB     -图像的句柄
*
*  返回值:
*        无
*
*  功能:
*     将256色位图转化为灰度图
*
***************************************************************/void Convert256toGray(HDIB hDIB)
{LPSTR    lpDIB;// 由DIB句柄得到DIB指针并锁定DIBlpDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB);// 指向DIB象素数据区的指针
    LPSTR   lpDIBBits;    // 指向DIB象素的指针BYTE *    lpSrc;    // 图像宽度
    LONG    lWidth;    // 图像高度
    LONG      lHeight;    // 图像每行的字节数
    LONG    lLineBytes;    // 指向BITMAPINFO结构的指针(Win3.0)
    LPBITMAPINFO lpbmi;    // 指向BITMAPCOREINFO结构的指针
    LPBITMAPCOREINFO lpbmc;// 获取指向BITMAPINFO结构的指针(Win3.0)lpbmi = (LPBITMAPINFO)lpDIB;    // 获取指向BITMAPCOREINFO结构的指针lpbmc = (LPBITMAPCOREINFO)lpDIB;    // 灰度映射表BYTE bMap[256];// 计算灰度映射表(保存各个颜色的灰度值),并更新DIB调色板int    i,j;for (i = 0; i < 256; i ++){// 计算该颜色对应的灰度值bMap[i] = (BYTE)(0.299 * lpbmi->bmiColors[i].rgbRed +0.587 * lpbmi->bmiColors[i].rgbGreen +0.114 * lpbmi->bmiColors[i].rgbBlue + 0.5);            // 更新DIB调色板红色分量lpbmi->bmiColors[i].rgbRed = i;    // 更新DIB调色板绿色分量lpbmi->bmiColors[i].rgbGreen = i;    // 更新DIB调色板蓝色分量lpbmi->bmiColors[i].rgbBlue = i;// 更新DIB调色板保留位lpbmi->bmiColors[i].rgbReserved = 0;}// 找到DIB图像象素起始位置lpDIBBits = ::FindDIBBits(lpDIB);// 获取图像宽度lWidth = ::DIBWidth(lpDIB);    // 获取图像高度lHeight = ::DIBHeight(lpDIB);    // 计算图像每行的字节数lLineBytes = WIDTHBYTES(lWidth * 8);    // 更换每个象素的颜色索引(即按照灰度映射表换成灰度值)//逐行扫描
for(i = 0; i < lHeight; i++)
{//逐列扫描
for(j = 0; j < lWidth; j++)
{// 指向DIB第i行,第j个象素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;// 变换*lpSrc = bMap[*lpSrc];
}
}//解除锁定
::GlobalUnlock ((HGLOBAL)hDIB);
}

运行效果:

转载于:https://www.cnblogs.com/Bobby0322/p/5408168.html

图像预处理第1步:将256色图像转化为灰度图像相关推荐

  1. 图像预处理第7步:标准归一化

    图像预处理第7步:标准归一化 将分割出来的各个不同宽.高的数字字符宽.高统一 //图像预处理第7步:标准归一化 //将分割出来的各个不同宽.高的数字字符宽.高统一 void CChildView::O ...

  2. 图像预处理第8步:紧缩重排数字字符

    //图像预处理第8步:紧缩重排已经分割完毕的数字字符,并形成新的位图句柄 void CChildView::OnImgprcShrinkAlign() {m_hDIB=AutoAlign(m_hDIB ...

  3. 图像预处理第4步:去离散杂点噪声

    //图像预处理第4步:去离散杂点噪声 void CChildView::OnImgprcRemoveNoise() {RemoveScatterNoise(m_hDIB);//在屏幕上显示位图CDC* ...

  4. 点阵墨水屏的使用以及图像预处理

    我们电子日历的产品,选用的屏幕尺寸为5.83寸,分辨率为648*480.屏幕本身支持黑白红三色,我们使用黑白两色,单色位图表示的话,每个位都能表示一个像素点.所以对于这个屏幕而言,要显示一整幅图,需要 ...

  5. RGB-D立体视觉导航之图像预处理

    为了获得用于相机位姿估计的特征点对做的图像预处理 1.阈值分割 目的是获得领航AGV的外壳轮廓 阈值分割是按照图像像素灰度幅度进行分割的方法,它是把图像的灰度分成不同的等级,然后用设置灰度门限(阈值) ...

  6. 一阶微分算子锐化图像_【动手学计算机视觉】第三讲:图像预处理之图像分割...

    本讲完整代码>> 前言 图像分割是一种把图像分成若干个独立子区域的技术和过程.在图像的研究和应用中,很多时候我们关注的仅是图像中的目标或前景(其他部分称为背景),它们对应图像中特定的.具有 ...

  7. opencv ocr字符识别_OCR深度实践系列:图像预处理

    近一个半月时间没更了,在这段时间里针对OCR业务进行了深入研究,业务也已上线,谨以此篇作为OCR系列的开篇. 目前NLP+OCR的落地应用在市场上愈加火热,如金融领域的研报分析.司法领域的合同审核甚至 ...

  8. pytorch —— 图像预处理模块(Transforms)

    transforms运行机制 torchvision是pytorch的计算机视觉工具包,在torchvision中有三个主要的模块: torchvision.transforms,常用的图像预处理方法 ...

  9. 数据科学和人工智能技术笔记 四、图像预处理

    四.图像预处理 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 图像二值化 # 加载库 import cv2 import numpy as np from matpl ...

  10. 图像预处理库CV-CUDA开源了,打破预处理瓶颈,提升推理吞吐量20多倍

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:思 当 CPU 图像预处理成为视觉任务的瓶颈,最新开源的CV ...

最新文章

  1. 给phpcms v9增加类似于phpcms 2008中的关键词表
  2. Spring boot的@Value注解
  3. 哈夫曼编码译码 C语言,【求助】严蔚敏版数据结构 哈夫曼编码译码
  4. 论文解读 | 基于递归联合注意力的句子匹配模型
  5. 计算机组成原理 中央处理器(CPU) 指令系统
  6. python global nonlocal
  7. curl 请求日志_Java 日志实践:简明配置、日志抽样和级别动态修改
  8. H5本地储存Web Storage
  9. 判断一个数是偶数还是素数 做相应处理并排序输出
  10. 郑州大学linux安装锐捷客户端
  11. 如何决定是否参加培训,一个业内人士的推荐
  12. 【学习笔记】Python_Faker,制造测试数据的第三方库,创建姓名、手机、电话、浏览器头、时间、地址等
  13. Transformer主干网络——ViT保姆级解析
  14. 计算机组成原理学习笔记一
  15. 利用Python获取历史双色球开奖结果
  16. EXCEL中对一列数据每隔n行提取数据出来
  17. 【Rust日报】 2019-04-09
  18. Windows Azure Platform (四) Windows Azure架构
  19. 使用批处理__更改ip
  20. DOS操作系统、常用DOS命令简介

热门文章

  1. JVM学习04-垃圾回收概念与算法
  2. python cursor游标_python tuble、lambda及cursor游标相关
  3. 高16位低16位什么意思_为什么模拟量模块16位要比13位转换精度高,高多少?
  4. 大学课程很少有教怎么设计单片机开发板,进阶板更不用说
  5. java mybatis sql server未返回响应。连接已关闭
  6. 【sklearn第七讲】数据集加载工具
  7. Docker系列(五)实战:在容器中部署静态网站
  8. Android 布局渲染流程与卡顿优化
  9. Linux中脚本的使用方法
  10. mssql sql server 其它系统函数 parsename 点语法字符串分割函数应用简介