C#机器视觉入门系列1-转化为灰度图&&3*3模糊
这是我入门机器视觉的系列学习经验之开篇,本来想着依靠opencv快速实现一些功能,但是想了一下既然是学数学的,还是应该自己多算算,写一些自己理解的东西才好。
入门篇很简单,就只是实现了转化成灰度图以及模糊(去噪点),模糊功能写得很简单。文章基于C#实现。
首先新建一个winform程序,添加一个picturebox和一个botton按钮,在解决资源管理器里面新建一个类,本文我取名为Greyand3_3.cs,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
namespace roberts
{
class Greyand3_3
{
//转化成灰度图且3*3平均模糊
public Image GreyMethod(Image testimage)
{
Bitmap newGreyImage;
newGreyImage = new Bitmap(testimage);
Color pixelColor;
;
double T;
;
//转换成灰度图
; i < newGreyImage.Width; i++)
{
; g < newGreyImage.Height; g++)
{
pixelColor = newGreyImage.GetPixel(i, g);
newUnitColor = (pixelColor.R + pixelColor.G + pixelColor.B) / ;
Color newColor = Color.FromArgb(newUnitColor, newUnitColor, newUnitColor);
newGreyImage.SetPixel(i, g, newColor);
}
}
//3*3去除噪点
; m < newGreyImage.Width - ; m++)
{
; n < newGreyImage.Height - ; n++)
{
; x < 3; x++)
{
; y < 3; y++)
{
pixelColor = newGreyImage.GetPixel(m + x, n + y);
AverageColor = pixelColor.R + AverageColor;
}
}
AverageColor = Math.Round(AverageColor / );
int XYA = Convert.ToInt32(AverageColor);
|| XYA < )
{
XYA = ;
}
newGreyImage.SetPixel(m, n, Color.FromArgb(XYA, XYA, XYA));
}
}
return newGreyImage;
}
}
}
引用system.Drawing,处理图像需要使用该命名空间的Bitmap。首先转换成灰度图按照公式:newcolor = (R + G + B) /3 即可。
实现过程使用两个for循环完成(x方向和y方向),Color 用来存储颜色,Getpixel表示获取当前像素的颜色,Setpixel表示修改当前像素的颜色。
3*3模糊
由于噪点通常会出现亮度突增的情况,因此对其取九宫格平均值可以降低其亮度,只要在循环里计算求值&赋值就好了。使用math.round的使用总是出错,应该是对黑色区域取整的时候取大了,因此对于大于255的值一律赋值为255.
写得十分简单,实现本来也容易,这个方法的效果并不好,后面使用Gauss的时候会好一点,但是在笔记本上跑得真的蛮慢的。
效果如下:

C#机器视觉入门系列1-转化为灰度图&&3*3模糊的更多相关文章
- MATLAB 矩阵转化为灰度图
A=[ 1.00 0.96 0.98 0.88 0.94 0.61 0.96 0.80 0.98 0.89 0.96 1.00 0.94 0.90 0.95 0.71 0.96 0.83 0.90 0 ...
- 【 D3.js 入门系列 --- 9.3 】 弦图生产
我个人的博客: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 弦图( Chord ),主要用于表示两个节点之间的联系.例如以下图: ...
- S0.2 灰度图
目录 灰度图定义 灰度图优点 RGB转灰度算法(OpenCV3) 量化 算法公式 OpenCV自带函数实现 综合比较 灰度图定义 对于单色(灰度)图像而言,每个像素的亮度用一个数值来表示,通常数值范围 ...
- 图像处理基础---RGB图 灰度图 索引图 调色板
(1)二进制图 在二进制图中,像素的取值为两个离散数值0或1中的一个,0代表黑色,1代表白色 例 A=[0 0 1;1 1 0; 0 0 1];>> imshow(A,'InitialMa ...
- 快速入门系列--MVC--01概述
虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...
- 【JAVA零基础入门系列】Day9 Java中的那个大数值
什么是大数值?用脚趾头想也知道,当然是"大"的数值(233).Java中有两个用于表示大数值的类,BigInteger和BigDecimal,那到底能表示多大的数值呢?理论上,可以 ...
- 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST
目录 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST 下载数据集 加载数据集 构建神经网络 反向传播(BP)算法 进行预测 F1验证 总结 参考 数据挖掘入门系 ...
- Spring Boot入门系列(十六)使用pagehelper实现分页功能
之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...
- Spring Boot入门系列(二十)快速打造Restful API 接口
spring boot入门系列文章已经写到第二十篇,前面我们讲了spring boot的基础入门的内容,也介绍了spring boot 整合mybatis,整合redis.整合Thymeleaf 模板 ...
随机推荐
- php : 基础(4)
流程控制 循环结构 循环的中断 循环中,有两种中断语句可以使用: break: 用于完全终止某个循环,让执行流程进入到循环语句后面的语句: continue: 用于停止当前正在进行的当次循环,而进入到 ...
- DBUTIL 调用存储过程例子
执行存储过程和执行select查询相比,无非就是SQL语句不同.下面是一个用存储过程查记录的例子.根据你的数据库不同和域对象不同,此代码要修改 Java code ? 1 2 3 4 5 Quer ...
- position absolute 绝对定位 设置问题
今天在做布局的时候,用到了绝对定位, 父级元素相对定位,子元素两个,一个元素正常文档流布局并且在前面,另一个元素绝对定位排在后面,但设置了好久,绝对定位的子元素都不会覆盖其上面的兄弟元素,最后,不知 ...
- python & c
http://www.ibm.com/developerworks/cn/linux/l-cn-pythonandc/
- miniui datepicker 二次加工
function onshowpopup(){ $(".mini-calendar-timespinner").css({"width":"180px ...
- iOS TextField用法大全
//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...
- AJAX总结
艾瑞宝迪,早上好,前端小菜鸟最近想更深入的了解ajax,无奈网上都没有看到合适系统的总结,于是心血来潮开始自己在博客园上的处女作,方便自己以后查看,也可以和大家一起交流
- Table 'performance_schema.session_variables' doesn't exist
出现标题所示错误时设置如下参数可以解决!set @@global.show_compatibility_56=ON;
- 删除win8的网络连接记录
打开注册表,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles,修改各个子项里的P ...
- CentOS 7 配置静态IP
1.查看MAC地址 2.修改/etc/sysconfig/network-scripts/ifcfg-[第一步中红框内的文字] 3.添加和修改内容如下: 4.修改/etc/resolv.conf 5. ...