模式识别---图像二值化
时间:2022-05-06
本文章向大家介绍模式识别---图像二值化,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
要对图像进行识别,首先要做的将图像从多通道颜色分量变为单通道,也就是gray色调中来,常用的方法有目下三种,
第一种
求rgb颜色风量的平均值:
G(x,y) =(r(x,y)+g(x,y)+b(x,y))/3.
第二种:
视觉心理学公式:
G(x,y)= r(x,y)*299 + g(x,y)*587 + b(x,y)*114/1000
还有一种:
G(x,y) = r(x,y)*0.11 + g(x,y)*0.59 + b(x,y)*0.3;
第三种: Adobe Photoshop 采取的公式
Adobe RGB (1998) [gamma=2.20] Gray = (R^2.2 * 0.2973 + G^2.2 * 0.6274 + B^2.2 * 0.0753)^(1/2.2)
速度依次变慢,效果逐渐变好.
采用第二种效果进行将彩色图片灰度化:(关键代码)
1 for(int i=0;i<cinfo.image_width;i++) {
2 color_r = (int)buffer[0][i*3];
3 color_g = (int)buffer[0][i*3+1];
4 color_b = (int)buffer[0][i*3+2];
5 var_gray = 0.11*color_r+0.59*color_g+0.3*color_b;
6 if(var_gray<0) var_gray=0;
7 //else var_gray =255;
8 buffer[0][i*3]=(unsigned char)(var_gray&0xff);
9 buffer[0][i*3+1]=(unsigned char)(var_gray&0xff);
10 buffer[0][i*3+2]=(unsigned char)(var_gray&0xff);
11 }
效果图:
一般进过从多通道颜色分量处理之后,就需要对图像进行腐蚀,然后得到二值化图像。需要设定一个阈值,进行单纯的判断,这是最简单的方式
1 for(int i=0;i<cinfo.image_width;i++) {
2 color_r = (int)buffer[0][i*3];
3 color_g = (int)buffer[0][i*3+1];
4 color_b = (int)buffer[0][i*3+2];
5 var_gray = 0.11*color_r+0.59*color_g+0.3*color_b;
6 if(var_gray<128) var_gray=0;
7 else var_gray =255;
8 buffer[0][i*3]=(unsigned char)(var_gray&0xff);
9 buffer[0][i*3+1]=(unsigned char)(var_gray&0xff);
10 buffer[0][i*3+2]=(unsigned char)(var_gray&0xff);
11 }
效果图:
- 用Python实现微信接口(一)
- MYSQL常见错误及其解决方式
- 用Python实现微信接口(二)
- (63) 实用序列化: JSON/XML/MessagePack / 计算机程序的思维逻辑
- Quartz作业调度框架
- Oracle系统表整理+常用SQL语句收集
- Webpack 实用技巧高效实战
- oracle表空间不足相关问题解决办法
- 手工打造分布式爬虫
- (64) 常见文件类型处理: 属性文件/CSV/EXCEL/HTML/压缩文件 / 计算机程序的思维逻辑
- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter与org.apache.struts2.dispatcher.
- Python协程演进过程
- Android TV开发简介
- (59) 文件和目录操作 / 计算机程序的思维逻辑
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- TensorFlow 模型剪枝
- 机器人如何使用 RRT 进行路径规划?
- 高效 PyTorch:6个训练Tips
- 机器学习与情绪交易(附代码)
- 社区前端游戏框架LollipopCreator v1.0.X正式开源
- 社区开源框架音效管理模块:AudioManager详解
- 社区开源框架音效管理模块:AvatarManager详解
- vue-element-admin实现一个可编辑的table
- vue+element实现一个excel表格下载的功能
- vue的select下拉框多选项-multiple属性
- HBase基准测试
- Shell数组的使用
- 查询MYSQL锁表情况
- 查看MYSQL表数据大小
- 解决Centos6.0下出现protocol not available错误