图像预处理第1步:将256色图像转化为灰度图像
//图像预处理第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色图像转化为灰度图像相关推荐
- 图像预处理第7步:标准归一化
图像预处理第7步:标准归一化 将分割出来的各个不同宽.高的数字字符宽.高统一 //图像预处理第7步:标准归一化 //将分割出来的各个不同宽.高的数字字符宽.高统一 void CChildView::O ...
- 图像预处理第8步:紧缩重排数字字符
//图像预处理第8步:紧缩重排已经分割完毕的数字字符,并形成新的位图句柄 void CChildView::OnImgprcShrinkAlign() {m_hDIB=AutoAlign(m_hDIB ...
- 图像预处理第4步:去离散杂点噪声
//图像预处理第4步:去离散杂点噪声 void CChildView::OnImgprcRemoveNoise() {RemoveScatterNoise(m_hDIB);//在屏幕上显示位图CDC* ...
- 点阵墨水屏的使用以及图像预处理
我们电子日历的产品,选用的屏幕尺寸为5.83寸,分辨率为648*480.屏幕本身支持黑白红三色,我们使用黑白两色,单色位图表示的话,每个位都能表示一个像素点.所以对于这个屏幕而言,要显示一整幅图,需要 ...
- RGB-D立体视觉导航之图像预处理
为了获得用于相机位姿估计的特征点对做的图像预处理 1.阈值分割 目的是获得领航AGV的外壳轮廓 阈值分割是按照图像像素灰度幅度进行分割的方法,它是把图像的灰度分成不同的等级,然后用设置灰度门限(阈值) ...
- 一阶微分算子锐化图像_【动手学计算机视觉】第三讲:图像预处理之图像分割...
本讲完整代码>> 前言 图像分割是一种把图像分成若干个独立子区域的技术和过程.在图像的研究和应用中,很多时候我们关注的仅是图像中的目标或前景(其他部分称为背景),它们对应图像中特定的.具有 ...
- opencv ocr字符识别_OCR深度实践系列:图像预处理
近一个半月时间没更了,在这段时间里针对OCR业务进行了深入研究,业务也已上线,谨以此篇作为OCR系列的开篇. 目前NLP+OCR的落地应用在市场上愈加火热,如金融领域的研报分析.司法领域的合同审核甚至 ...
- pytorch —— 图像预处理模块(Transforms)
transforms运行机制 torchvision是pytorch的计算机视觉工具包,在torchvision中有三个主要的模块: torchvision.transforms,常用的图像预处理方法 ...
- 数据科学和人工智能技术笔记 四、图像预处理
四.图像预处理 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 图像二值化 # 加载库 import cv2 import numpy as np from matpl ...
- 图像预处理库CV-CUDA开源了,打破预处理瓶颈,提升推理吞吐量20多倍
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:思 当 CPU 图像预处理成为视觉任务的瓶颈,最新开源的CV ...
最新文章
- 给phpcms v9增加类似于phpcms 2008中的关键词表
- Spring boot的@Value注解
- 哈夫曼编码译码 C语言,【求助】严蔚敏版数据结构 哈夫曼编码译码
- 论文解读 | 基于递归联合注意力的句子匹配模型
- 计算机组成原理 中央处理器(CPU) 指令系统
- python global nonlocal
- curl 请求日志_Java 日志实践:简明配置、日志抽样和级别动态修改
- H5本地储存Web Storage
- 判断一个数是偶数还是素数 做相应处理并排序输出
- 郑州大学linux安装锐捷客户端
- 如何决定是否参加培训,一个业内人士的推荐
- 【学习笔记】Python_Faker,制造测试数据的第三方库,创建姓名、手机、电话、浏览器头、时间、地址等
- Transformer主干网络——ViT保姆级解析
- 计算机组成原理学习笔记一
- 利用Python获取历史双色球开奖结果
- EXCEL中对一列数据每隔n行提取数据出来
- 【Rust日报】 2019-04-09
- Windows Azure Platform (四) Windows Azure架构
- 使用批处理__更改ip
- DOS操作系统、常用DOS命令简介
热门文章
- JVM学习04-垃圾回收概念与算法
- python cursor游标_python tuble、lambda及cursor游标相关
- 高16位低16位什么意思_为什么模拟量模块16位要比13位转换精度高,高多少?
- 大学课程很少有教怎么设计单片机开发板,进阶板更不用说
- java mybatis sql server未返回响应。连接已关闭
- 【sklearn第七讲】数据集加载工具
- Docker系列(五)实战:在容器中部署静态网站
- Android 布局渲染流程与卡顿优化
- Linux中脚本的使用方法
- mssql sql server 其它系统函数 parsename 点语法字符串分割函数应用简介